diff --git a/extra/libreoffice-still/0001_drop_the_SolarMutex_before_QApplication.patch b/extra/libreoffice-still/0001_drop_the_SolarMutex_before_QApplication.patch
deleted file mode 100644
index a17c7530d..000000000
--- a/extra/libreoffice-still/0001_drop_the_SolarMutex_before_QApplication.patch
+++ /dev/null
@@ -1,76 +0,0 @@
-From db43e8a2a02adaa3571137b82855c01fad4c2534 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
-Date: Wed, 2 Feb 2022 16:21:43 +0000
-Subject: rhbz#2047319 drop the SolarMutex before QApplication::init()
-
-https://invent.kde.org/qt/qt/qtwayland/-/merge_requests/24#note_383915
-
-reproducible with with qt5-qtwayland-5.15.2-17.fc35.x86_64 and
-export OOO_FORCE_DESKTOP=plasma5
-export SAL_USE_VCLPLUGIN=gtk3
-
-Change-Id: Icdf6b8709865c723c266e6400169b33639a1b0e4
-Reviewed-on: https://gerrit.libreoffice.org/c/core/+/129428
-Tested-by: Jenkins
-Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
----
- shell/Library_kf5be.mk                     |  1 +
- shell/source/backends/kf5be/kf5backend.cxx | 23 +++++++++++++++--------
- 2 files changed, 16 insertions(+), 8 deletions(-)
-
-diff --git a/shell/Library_kf5be.mk b/shell/Library_kf5be.mk
-index 628145176e0f..157f8b9836f8 100644
---- a/shell/Library_kf5be.mk
-+++ b/shell/Library_kf5be.mk
-@@ -20,6 +20,7 @@ $(eval $(call gb_Library_use_libraries,kf5be1,\
- 	cppu \
- 	cppuhelper \
- 	sal \
-+	vcl \
- ))
- 
- $(eval $(call gb_Library_set_componentfile,kf5be1,shell/source/backends/kf5be/kf5be1))
-diff --git a/shell/source/backends/kf5be/kf5backend.cxx b/shell/source/backends/kf5be/kf5backend.cxx
-index e9e10e60fd27..2b41414c54cd 100644
---- a/shell/source/backends/kf5be/kf5backend.cxx
-+++ b/shell/source/backends/kf5be/kf5backend.cxx
-@@ -41,6 +41,7 @@
- #include <rtl/ustring.hxx>
- #include <sal/types.h>
- #include <uno/current_context.hxx>
-+#include <vcl/svapp.hxx>
- 
- #include <osl/process.h>
- #include <osl/thread.h>
-@@ -172,14 +173,20 @@ void initQApp(std::map<OUString, css::beans::Optional<css::uno::Any>>& rSettings
-         unsetenv("SESSION_MANAGER");
-     }
- 
--    std::unique_ptr<QApplication> app(new QApplication(nFakeArgc, pFakeArgv));
--    QObject::connect(app.get(), &QObject::destroyed, app.get(), [nFakeArgc, pFakeArgv]() {
--        for (int i = 0; i < nFakeArgc; ++i)
--            free(pFakeArgv[i]);
--        delete[] pFakeArgv;
--    });
--
--    readKDESettings(rSettings);
-+    {
-+        // rhbz#2047319 drop the SolarMutex during the execution of QApplication::init()
-+        // https://invent.kde.org/qt/qt/qtwayland/-/merge_requests/24#note_383915
-+        SolarMutexReleaser aReleaser; // rhbz#2047319 drop the SolarMutex during the execution
-+
-+        std::unique_ptr<QApplication> app(new QApplication(nFakeArgc, pFakeArgv));
-+        QObject::connect(app.get(), &QObject::destroyed, app.get(), [nFakeArgc, pFakeArgv]() {
-+            for (int i = 0; i < nFakeArgc; ++i)
-+                free(pFakeArgv[i]);
-+            delete[] pFakeArgv;
-+        });
-+
-+        readKDESettings(rSettings);
-+    }
- 
-     if (session_manager != nullptr)
-     {
--- 
-cgit v1.2.1
-
diff --git a/extra/libreoffice-still/PKGBUILD b/extra/libreoffice-still/PKGBUILD
index c186cf5d1..476e34144 100644
--- a/extra/libreoffice-still/PKGBUILD
+++ b/extra/libreoffice-still/PKGBUILD
@@ -17,9 +17,9 @@ _google_default_client_secret=0ZChLK6AxeA3Isu96MkwqDR4
 
 pkgbase=libreoffice-still
 pkgname=('libreoffice-still-sdk' 'libreoffice-still')
-_LOver=7.2.7.2
-pkgver=7.2.7
-pkgrel=5
+_LOver=7.3.5.2
+pkgver=7.3.5
+pkgrel=2
 arch=('x86_64')
 license=('LGPL3')
 url="https://www.libreoffice.org/"
@@ -36,8 +36,9 @@ makedepends=('curl>=7.20.0' 'hunspell>=1.2.8' 'python>=3.7' 'libwpd>=0.9.2' 'lib
 	'apr' 'serf' 'ttf-liberation' 'ttf-dejavu' 'ttf-carlito' 'libxinerama' 'libpagemaker' 'glm'
 	'libabw' 'libmwaw' 'libe-book' 'coin-or-mp' 'liblangtag' 'liborcus' 
 	'libexttextcat' 'libcmis' 'gobject-introspection' # 'libfbclient'
-	'libtommath' 'libzmf' 'xmlsec' 'rxvt-unicode' #'gpgme' 
+	'libtommath' 'libzmf' 'xmlsec' 'rxvt-unicode' 'gpgme' 
 	'libepubgen' 'libfreehand' 'libqxp' 'libstaroffice'  'boost' 'libnumbertext'
+	'libcuckoo' 'abseil-cpp' 'clang' #'zxing-cpp'
 	'libffi' 'box2d' 'git'
 )
 options=('!lto') # using --enable-lto (for parallel link-time optimization)
@@ -54,23 +55,16 @@ source=(${_mirror}/libreoffice{,-help,-translations}-${_LOver}.tar.xz{,.asc}
 	${_additional_source_url}/17410483b5b5f267aa18b7e00b65e6e0-hsqldb_1_8_0.zip
 	${_additional_source_url}/d8bd5eed178db6e2b18eeed243f85aa8-flute-1.1.6.zip
 	${_additional_source_url}/ba2930200c9f019c2d93a8c88c651a0f-flow-engine-0.9.4.zip
-	${_additional_source_url}/pdfium-4500.tar.bz2
+	${_additional_source_url}/pdfium-4699.tar.bz2
 	${_additional_source_url}/dtoa-20180411.tgz
 	${_additional_source_url}/lxml-4.1.1.tgz
-	${_additional_source_url}/zxing-cpp-1.1.1.tar.gz
-	${_additional_source_url}/skia-m90-45c57e116ee0ce214bdf78405a4762722e4507d9.tar.xz
-        ${_additional_source_url}/gpgme-1.13.1.tar.bz2
-        ${_additional_source_url}/libgpg-error-1.37.tar.bz2
-        ${_additional_source_url}/libassuan-2.5.3.tar.bz2
+	${_additional_source_url}/skia-m97-a7230803d64ae9d44f4e1282444801119a3ae967.tar.xz
+	${_additional_source_url}/zxing-cpp-1.2.0.tar.gz
 	${_additional_source_url2}/8249374c274932a21846fa7629c2aa9b-officeotron-0.7.4-master.jar  # for test suite
 	${_additional_source_url2}/odfvalidator-1.2.0-incubating-SNAPSHOT-jar-with-dependencies-971c54fd38a968f5860014b44301872706f9e540.jar # for test suite
 	${_additional_source_url2}/f543e6e2d7275557a839a164941c0a86e5f2c3f2a0042bfc434c88c6dde9e140-opens___.ttf
 	${_additional_source_url2}/185d60944ea767075d27247c3162b3bc-unowinreg.dll
-	poppler-22.03.0.patch
-	poppler-22.04.0.patch
 	make-pyuno-work-with-system-wide-module-install.diff
-	mdds-2.0-and-orcus-0.17.diff
-	0001_drop_the_SolarMutex_before_QApplication.patch
 	soffice-template.desktop.in
 	libreoffice-still.sh libreoffice-still.csh)
 noextract=(35c94d2df8893241173de1d16b6034c0-swingExSrc.zip
@@ -81,25 +75,22 @@ noextract=(35c94d2df8893241173de1d16b6034c0-swingExSrc.zip
            17410483b5b5f267aa18b7e00b65e6e0-hsqldb_1_8_0.zip
            d8bd5eed178db6e2b18eeed243f85aa8-flute-1.1.6.zip
            ba2930200c9f019c2d93a8c88c651a0f-flow-engine-0.9.4.zip
-           pdfium-4500.tar.bz2
+           pdfium-4699.tar.bz2
            dtoa-20180411.tgz
            lxml-4.1.1.tgz
-           zxing-cpp-1.1.1.tar.gz
-           skia-m90-45c57e116ee0ce214bdf78405a4762722e4507d9.tar.xz
-           gpgme-1.13.1.tar.bz2
-           libgpg-error-1.37.tar.bz2
-           libassuan-2.5.3.tar.bz2
+           skia-m97-a7230803d64ae9d44f4e1282444801119a3ae967.tar.xz
+           zxing-cpp-1.2.0.tar.gz
            8249374c274932a21846fa7629c2aa9b-officeotron-0.7.4-master.jar  # for test suite
            odfvalidator-1.2.0-incubating-SNAPSHOT-jar-with-dependencies-971c54fd38a968f5860014b44301872706f9e540.jar  # for test suite
            f543e6e2d7275557a839a164941c0a86e5f2c3f2a0042bfc434c88c6dde9e140-opens___.ttf
            185d60944ea767075d27247c3162b3bc-unowinreg.dll
 )
 validpgpkeys=('C2839ECAD9408FBE9531C3E9F434A1EFAFEEAEA3') # LibreOffice Build Team (CODE SIGNING KEY) <build@documentfoundation.org>
-sha256sums=('6deaf83a0c2b83c5c8c53c2a9443e2ece51e19469494be2027d4fef3a61bc6a2'
+sha256sums=('9b3e0db1ee153330ea05f04109bd817dbac2203d2eed83ef54be54d4c741e991'
             'SKIP'
-            'a4d87b16c05e892b741db9683474692c25907f8df162d5c27ba65bdc8fcb6fe2'
+            '9571c1953d7297d158dee8849f7e6315b102fb0cafb2280693e6064ef8013ca2'
             'SKIP'
-            '2377014eea11b41e998545aae875ee32df097e869ea329f1be07a44c28595d04'
+            'd2fe9df14d1d7bbf16dd4c7f2fc9331622619d18caadf612d932496f52e146b2'
             'SKIP'
             '64585ac36a81291a58269ec5347e7e3e2e8596dbacb9221015c208191333c6e1'
             '1fb458d6aab06932693cc8a9b6e4e70944ee1ff052fa63606e3131df34e21753'
@@ -109,24 +100,17 @@ sha256sums=('6deaf83a0c2b83c5c8c53c2a9443e2ece51e19469494be2027d4fef3a61bc6a2'
             'd30b13f4ba2e3b6a2d4f020c0dee0a9fb9fc6fbcc2d561f36b78da4bf3802370'
             '1b5b24f7bc543c0362b667692f78db8bab4ed6dafc6172f104d0bd3757d8a133'
             '233f66e8d25c5dd971716d4200203a612a407649686ef3b52075d04b4c9df0dd'
-            '26a03dd60e5ed0979cdaba9cc848242895110ddfdf347d40989ce2f14020f304'
+            'ee80fe0a3b20ef5c5babc494cd655d1b1a0bdec710acb04524789df500c563bf'
             '0082d0684f7db6f62361b76c4b7faba19e0c7ce5cb8e36c4b65fea8281e711b4'
             '940caef1ec7c78e0c34b0f6b94fe42d0f2022915ffc78643d28538a5cfd0f40e'
             'acb85cedafa10ce106b1823fb236b1b3e5d942a5741e8f8435cc8ccfec0afe76'
-            'e595b3fa2ec320beb0b28f6af56b1141853257c2611686685639cebb3b248c86'
-            'abe0b94d54edb717c58d74263f4ed3d27824d2ce9e9f2ce85a21ab38d993f94d'
-            'c4e30b227682374c23cddc7fdb9324a99694d907e79242a25a4deeedb393be46'
-            'b32d6ff72a73cf79797f7f2d039e95e9c6f92f0c1450215410840ab62aea9763'
-            '91bcb0403866b4e7c4bc1cc52ed4c364a9b5414b3994f718c70303f7f765e702'
+            '97e859e8467eca9d2441cd23079b61c2c3863b5687620f18cc31a9f966740177'
+            '653d9e44195d86cf64a36af9ff3a1978ec5599df3882439fefa56e7064f55e8a'
             'f2443f27561af52324eee03a1892d9f569adc8db9e7bca55614898bc2a13a770'
             '984f2a479df79e27e7b01a5815ac53ae64e07746b882262d8a64566494515504'
             'f543e6e2d7275557a839a164941c0a86e5f2c3f2a0042bfc434c88c6dde9e140'
             'eafde646a7dbe46d20c291685b0beac2382174d78d66ee990e229a1bf6e6cec6'
-            'e61e2a266c7a4374377475254a2f095c1ce2376980b301955a4e5a0d32d3c25b'
-            'caaef7919c6296ab93c7d02607503f91ec965387d038779c0aba9fce78b8e456'
             'c463654a73ecfbc242ff109726fb4faecdbfb3d91affafe919b24bea65afb563'
-            'fd84c4920b25a6ec4f5f08c852ae10a63a3d19c07d83916964f7fa23597d33dd'
-            '81a8551aaea0ab1750d36fb8bfbd04340a43eaab349a43c1384d21ef6504ab47'
             'd0be8099cbee3c9dfda694a828149b881c345b204ab68826f317580aafb50879'
             'cd1b25ff390e436c6bffa65c6e12382236e3ccbf8d3aae51b1b59bcaed79fd8a'
             'de20f36d45f0fecc2d94176dd3ec7226ab07fa8ffb9b0bc73c200349a9273de1')
@@ -135,6 +119,9 @@ prepare() {
 
 	cd libreoffice-$_LOver
 
+        # Workaround to fix build with gpgme 1.18.0
+        export ac_cv_lib_gpgmepp_progress_callback=yes
+
 	# move external sources into place
 	mkdir "${srcdir}"/ext_sources && pushd "${srcdir}"/ext_sources
 	for source in "${noextract[@]}"; do
@@ -147,18 +134,9 @@ prepare() {
 	rm "${srcdir}"/ext_sources/185d60944ea767075d27247c3162b3bc-unowinreg.dll
 	cp -f "${srcdir}"/185d60944ea767075d27247c3162b3bc-unowinreg.dll "${srcdir}"/ext_sources
 
-	patch -Np1 -i "${srcdir}"/poppler-22.03.0.patch
-	patch -Np0 -i "${srcdir}"/poppler-22.04.0.patch
-
 	# fix not upstreamable pyuno paths - FS#54250
 	patch -Np1 -i "${srcdir}"/make-pyuno-work-with-system-wide-module-install.diff
 
-	# fix build with current system libixion/liborcus/mdds
-	patch -Np1 -i "${srcdir}"/mdds-2.0-and-orcus-0.17.diff
-
-	# fix crash on start - FS#73471
-	patch -Np1 -i "${srcdir}"/0001_drop_the_SolarMutex_before_QApplication.patch
-
 	#use the CFLAGS but remove the LibO overridden ones
 	for i in $CFLAGS; do
 		case "$i" in
@@ -241,8 +219,9 @@ build() {
 		--with-system-libwps \
 		--with-system-redland\
 		--with-system-libzmf \
-		--without-system-gpgmepp \
+		--with-system-gpgmepp \
 		--with-system-libstaroffice \
+		--with-system-cuckoo \
 		--with-system-serf \
 		--with-jdk-home="/usr/lib/jvm/default" \
 		--with-ant-home="/usr/share/ant"\
@@ -308,8 +287,9 @@ package_libreoffice-still() {
 		'desktop-file-utils' 'shared-mime-info' 'libpagemaker'
 		'libxinerama' 'libabw' 'libmwaw' 'libe-book' 'libcups'
 		'liblangtag' 'libexttextcat' 'libcmis' 'liborcus' # 'libfbclient'
-		'libtommath' 'libzmf' 'libatomic_ops' 'xmlsec' 'libnumbertext' #'gpgme' 
+		'libtommath' 'libzmf' 'libatomic_ops' 'xmlsec' 'libnumbertext' 'gpgme' 
 		'libfreehand' 'libstaroffice' 'libepubgen' 'libqxp' 'libepoxy' 'box2d'
+		#'zxing-cpp'
 		'xdg-utils')
 	optdepends=('java-runtime:     adds java support'
 		'java-environment: required by extension-wiki-publisher and extension-nlpsolver'
@@ -410,3 +390,4 @@ package_libreoffice-still() {
 	'sid','sk','sl','sq','sv','ta','tg','tr','ug','uk','vi','zh-CN','zh-TW'])" \
 		> "${pkgdir}"/usr/lib/libreoffice/help/languages.js
 }
+
diff --git a/extra/libreoffice-still/mdds-2.0-and-orcus-0.17.diff b/extra/libreoffice-still/mdds-2.0-and-orcus-0.17.diff
deleted file mode 100644
index 32fb4b7b7..000000000
--- a/extra/libreoffice-still/mdds-2.0-and-orcus-0.17.diff
+++ /dev/null
@@ -1,4996 +0,0 @@
-From eb07a0e76fe240a184348d96a6cebf7c0a229ac0 Mon Sep 17 00:00:00 2001
-From: Kohei Yoshida <kohei@libreoffice.org>
-Date: Mon, 1 Nov 2021 14:01:22 -0400
-Subject: Upgrade mdds and liborcus to 2.0.0 and 0.17.0, respectively.
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Change-Id: I9e856fc2d61f1789a6f1702514837860539a0f49
-Reviewed-on: https://gerrit.libreoffice.org/c/core/+/124573
-Tested-by: Jenkins
-Tested-by: René Engelhard <rene@debian.org>
-Reviewed-by: Kohei Yoshida <kohei@libreoffice.org>
----
- RepositoryExternal.mk                              |    4 +-
- bin/oss-fuzz-setup.sh                              |    2 +-
- configure.ac                                       |    4 +-
- cui/source/dialogs/AdditionsDialog.cxx             |   62 +-
- download.lst                                       |    8 +-
- external/liborcus/ExternalPackage_liborcus.mk      |    8 +-
- external/liborcus/ExternalProject_liborcus.mk      |    4 +-
- external/liborcus/Library_orcus-parser.mk          |    1 +
- external/liborcus/UnpackedTarball_liborcus.mk      |    9 +-
- external/liborcus/allow-utf-8-in-xml-names.patch   |  301 -----
- external/liborcus/boost-filesystem.patch.1         |   41 +
- .../liborcus/inc/pch/precompiled_orcus-parser.hxx  |    1 -
- external/liborcus/inc/pch/precompiled_orcus.hxx    |    1 -
- external/liborcus/include.patch.0                  |   30 -
- external/liborcus/remove-unused-parameters.patch.1 | 1209 ++++++++++++++++++++
- external/liborcus/std-get-busted.patch.1           |  418 +++++++
- external/liborcus/unused-variables.patch.1         |   24 +
- external/mdds/UnpackedTarball_mdds.mk              |    6 +-
- external/mdds/Wunused-but-set-variable.patch       |   46 -
- .../mdds/remove-more-unused-parameters.patch.1     |   42 +
- external/mdds/remove-unused-parameters.patch.1     |   93 ++
- sc/inc/mtvelements.hxx                             |   22 +-
- sc/source/filter/inc/orcusinterface.hxx            |   50 +-
- sc/source/filter/orcus/interface.cxx               |   97 +-
- sc/source/filter/orcus/orcusfiltersimpl.cxx        |    8 +-
- sc/source/filter/orcus/xmlcontext.cxx              |   10 +-
- sfx2/source/control/emojiview.cxx                  |   11 +-
- solenv/flatpak-manifest.in                         |   12 +-
- 28 files changed, 1973 insertions(+), 551 deletions(-)
- delete mode 100644 external/liborcus/allow-utf-8-in-xml-names.patch
- create mode 100644 external/liborcus/boost-filesystem.patch.1
- delete mode 100644 external/liborcus/include.patch.0
- create mode 100644 external/liborcus/remove-unused-parameters.patch.1
- create mode 100644 external/liborcus/std-get-busted.patch.1
- create mode 100644 external/liborcus/unused-variables.patch.1
- delete mode 100644 external/mdds/Wunused-but-set-variable.patch
- create mode 100644 external/mdds/remove-more-unused-parameters.patch.1
- create mode 100644 external/mdds/remove-unused-parameters.patch.1
-
-diff --git a/RepositoryExternal.mk b/RepositoryExternal.mk
-index c28b049caef8..a2a7212aa837 100644
---- a/RepositoryExternal.mk
-+++ b/RepositoryExternal.mk
-@@ -3329,7 +3329,7 @@ $(call gb_LinkTarget_set_include,$(1),\
- )
- 
- $(call gb_LinkTarget_add_libs,$(1),\
--       -L$(call gb_UnpackedTarball_get_dir,liborcus)/src/liborcus/.libs -lorcus-0.16 \
-+       -L$(call gb_UnpackedTarball_get_dir,liborcus)/src/liborcus/.libs -lorcus-0.17 \
- )
- 
- $(if $(SYSTEM_BOOST), \
-@@ -3348,7 +3348,7 @@ $(call gb_LinkTarget_set_include,$(1),\
- )
- 
- $(call gb_LinkTarget_add_libs,$(1),\
--	-L$(call gb_UnpackedTarball_get_dir,liborcus)/src/parser/.libs -lorcus-parser-0.16 \
-+	-L$(call gb_UnpackedTarball_get_dir,liborcus)/src/parser/.libs -lorcus-parser-0.17 \
- )
- 
- endef
-diff --git a/configure.ac b/configure.ac
-index b8b3793b6204..a2a831da535a 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -10299,7 +10299,7 @@ AC_SUBST(SYSTEM_BOOST)
- dnl ===================================================================
- dnl Check for system mdds
- dnl ===================================================================
--libo_CHECK_SYSTEM_MODULE([mdds], [MDDS], [mdds-1.5 >= 1.5.0], ["-I${WORKDIR}/UnpackedTarball/mdds/include"])
-+libo_CHECK_SYSTEM_MODULE([mdds], [MDDS], [mdds-2.0 >= 2.0.0], ["-I${WORKDIR}/UnpackedTarball/mdds/include"])
- 
- dnl ===================================================================
- dnl Check for system glm
-@@ -10643,7 +10643,7 @@ AC_SUBST(ENABLE_FUZZERS)
- dnl ===================================================================
- dnl Orcus
- dnl ===================================================================
--libo_CHECK_SYSTEM_MODULE([orcus],[ORCUS],[liborcus-0.16 >= 0.16.0])
-+libo_CHECK_SYSTEM_MODULE([orcus],[ORCUS],[liborcus-0.17 >= 0.17.0])
- if test "$with_system_orcus" != "yes"; then
-     if test "$SYSTEM_BOOST" = "TRUE"; then
-         # ===========================================================
-diff --git a/cui/source/dialogs/AdditionsDialog.cxx b/cui/source/dialogs/AdditionsDialog.cxx
-index ac633177ef36..ec173740bc63 100644
---- a/cui/source/dialogs/AdditionsDialog.cxx
-+++ b/cui/source/dialogs/AdditionsDialog.cxx
-@@ -54,7 +54,6 @@
- #include <orcus/json_document_tree.hpp>
- #include <orcus/json_parser.hpp>
- #include <orcus/config.hpp>
--#include <orcus/pstring.hpp>
- 
- #define PAGE_SIZE 30
- 
-@@ -158,62 +157,37 @@ void parseResponse(const std::string& rResponse, std::vector<AdditionInfo>& aAdd
-         try
-         {
-             AdditionInfo aNewAddition = {
--                OStringToOUString(std::string_view(arrayElement.child("id").string_value().get()),
-+                OStringToOUString(arrayElement.child("id").string_value(), RTL_TEXTENCODING_UTF8),
-+                OStringToOUString(arrayElement.child("name").string_value(), RTL_TEXTENCODING_UTF8),
-+                OStringToOUString(arrayElement.child("author").string_value(),
-                                   RTL_TEXTENCODING_UTF8),
--                OStringToOUString(std::string_view(arrayElement.child("name").string_value().get()),
-+                OStringToOUString(arrayElement.child("url").string_value(), RTL_TEXTENCODING_UTF8),
-+                OStringToOUString(arrayElement.child("screenshotURL").string_value(),
-                                   RTL_TEXTENCODING_UTF8),
--                OStringToOUString(
--                    std::string_view(arrayElement.child("author").string_value().get()),
--                    RTL_TEXTENCODING_UTF8),
--                OStringToOUString(std::string_view(arrayElement.child("url").string_value().get()),
-+                OStringToOUString(arrayElement.child("extensionIntroduction").string_value(),
-+                                  RTL_TEXTENCODING_UTF8),
-+                OStringToOUString(arrayElement.child("extensionDescription").string_value(),
-                                   RTL_TEXTENCODING_UTF8),
-                 OStringToOUString(
--                    std::string_view(arrayElement.child("screenshotURL").string_value().get()),
-+                    arrayElement.child("releases").child(0).child("compatibility").string_value(),
-                     RTL_TEXTENCODING_UTF8),
-                 OStringToOUString(
--                    std::string_view(
--                        arrayElement.child("extensionIntroduction").string_value().get()),
-+                    arrayElement.child("releases").child(0).child("releaseName").string_value(),
-                     RTL_TEXTENCODING_UTF8),
-                 OStringToOUString(
--                    std::string_view(
--                        arrayElement.child("extensionDescription").string_value().get()),
-+                    arrayElement.child("releases").child(0).child("license").string_value(),
-                     RTL_TEXTENCODING_UTF8),
--                OStringToOUString(std::string_view(arrayElement.child("releases")
--                                                       .child(0)
--                                                       .child("compatibility")
--                                                       .string_value()
--                                                       .get()),
-+                OStringToOUString(arrayElement.child("commentNumber").string_value(),
-                                   RTL_TEXTENCODING_UTF8),
--                OStringToOUString(std::string_view(arrayElement.child("releases")
--                                                       .child(0)
--                                                       .child("releaseName")
--                                                       .string_value()
--                                                       .get()),
-+                OStringToOUString(arrayElement.child("commentURL").string_value(),
-                                   RTL_TEXTENCODING_UTF8),
--                OStringToOUString(std::string_view(arrayElement.child("releases")
--                                                       .child(0)
--                                                       .child("license")
--                                                       .string_value()
--                                                       .get()),
-+                OStringToOUString(arrayElement.child("rating").string_value(),
-+                                  RTL_TEXTENCODING_UTF8),
-+                OStringToOUString(arrayElement.child("downloadNumber").string_value(),
-                                   RTL_TEXTENCODING_UTF8),
-                 OStringToOUString(
--                    std::string_view(arrayElement.child("commentNumber").string_value().get()),
--                    RTL_TEXTENCODING_UTF8),
--                OStringToOUString(
--                    std::string_view(arrayElement.child("commentURL").string_value().get()),
--                    RTL_TEXTENCODING_UTF8),
--                OStringToOUString(
--                    std::string_view(arrayElement.child("rating").string_value().get()),
--                    RTL_TEXTENCODING_UTF8),
--                OStringToOUString(
--                    std::string_view(arrayElement.child("downloadNumber").string_value().get()),
--                    RTL_TEXTENCODING_UTF8),
--                OStringToOUString(std::string_view(arrayElement.child("releases")
--                                                       .child(0)
--                                                       .child("downloadURL")
--                                                       .string_value()
--                                                       .get()),
--                                  RTL_TEXTENCODING_UTF8)
-+                    arrayElement.child("releases").child(0).child("downloadURL").string_value(),
-+                    RTL_TEXTENCODING_UTF8)
-             };
- 
-             aAdditions.push_back(aNewAddition);
-diff --git a/download.lst b/download.lst
-index 561d4e5f5908..fc95d14dcc95 100644
---- a/download.lst
-+++ b/download.lst
-@@ -178,8 +178,8 @@ export LXML_SHA256SUM := 940caef1ec7c78e0c34b0f6b94fe42d0f2022915ffc78643d28538a
- export LXML_TARBALL := lxml-4.1.1.tgz
- export MARIADB_CONNECTOR_C_SHA256SUM := 431434d3926f4bcce2e5c97240609983f60d7ff50df5a72083934759bb863f7b
- export MARIADB_CONNECTOR_C_TARBALL := mariadb-connector-c-3.1.8-src.tar.gz
--export MDDS_SHA256SUM := a66a2a8293a3abc6cd9baff7c236156e2666935cbfb69a15d64d38141638fecf
--export MDDS_TARBALL := mdds-1.7.0.tar.bz2
-+export MDDS_SHA256SUM := 5a0fb2dd88a6420e0a69ec4c7259bcd1fe8f4a80b232c150e11f3da4c68236d7
-+export MDDS_TARBALL := mdds-2.0.0.tar.bz2
- export MDNSRESPONDER_SHA256SUM := e777b4d7dbf5eb1552cb80090ad1ede319067ab6e45e3990d68aabf6e8b3f5a0
- export MDNSRESPONDER_TARBALL := mDNSResponder-878.200.35.tar.gz
- export MSPUB_SHA256SUM := ef36c1a1aabb2ba3b0bedaaafe717bf4480be2ba8de6f3894be5fd3702b013ba
-@@ -204,8 +204,8 @@ export OPENLDAP_SHA256SUM := cdd6cffdebcd95161a73305ec13fc7a78e9707b46ca9f84fb89
- export OPENLDAP_TARBALL := openldap-2.4.59.tgz
- export OPENSSL_SHA256SUM := 0b7a3e5e59c34827fe0c3a74b7ec8baef302b98fa80088d7f9153aa16fa76bd1
- export OPENSSL_TARBALL := openssl-1.1.1l.tar.gz
--export ORCUS_SHA256SUM := c700d1325f744104d9fca0d5a019434901e9d51a16eedfb05792f90a298587a4
--export ORCUS_TARBALL := liborcus-0.16.1.tar.bz2
-+export ORCUS_SHA256SUM := 2ef9d2b5ee374c683cf631b78356b110510ab895788a68d778e225d8c4176d1b
-+export ORCUS_TARBALL := liborcus-0.17.0.tar.bz2
- export PAGEMAKER_SHA256SUM := 66adacd705a7d19895e08eac46d1e851332adf2e736c566bef1164e7a442519d
- export PAGEMAKER_TARBALL := libpagemaker-0.0.4.tar.xz
- export PDFIUM_SHA256SUM := 26a03dd60e5ed0979cdaba9cc848242895110ddfdf347d40989ce2f14020f304
-diff --git a/external/liborcus/ExternalPackage_liborcus.mk b/external/liborcus/ExternalPackage_liborcus.mk
-index 747691809d2e..13d61a8fecbd 100644
---- a/external/liborcus/ExternalPackage_liborcus.mk
-+++ b/external/liborcus/ExternalPackage_liborcus.mk
-@@ -12,11 +12,11 @@ $(eval $(call gb_ExternalPackage_ExternalPackage,liborcus,liborcus))
- $(eval $(call gb_ExternalPackage_use_external_project,liborcus,liborcus))
- 
- ifeq ($(OS),MACOSX)
--$(eval $(call gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-0.16.0.dylib,src/liborcus/.libs/liborcus-0.16.0.dylib))
--$(eval $(call gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-parser-0.16.0.dylib,src/parser/.libs/liborcus-parser-0.16.0.dylib))
-+$(eval $(call gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-0.17.0.dylib,src/liborcus/.libs/liborcus-0.17.0.dylib))
-+$(eval $(call gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-parser-0.17.0.dylib,src/parser/.libs/liborcus-parser-0.17.0.dylib))
- else ifeq ($(DISABLE_DYNLOADING),)
--$(eval $(call gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-0.16.so.0,src/liborcus/.libs/liborcus-0.16.so.0.0.0))
--$(eval $(call gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-parser-0.16.so.0,src/parser/.libs/liborcus-parser-0.16.so.0.0.0))
-+$(eval $(call gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-0.17.so.0,src/liborcus/.libs/liborcus-0.17.so.0.0.0))
-+$(eval $(call gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-parser-0.17.so.0,src/parser/.libs/liborcus-parser-0.17.so.0.0.0))
- endif
- 
- # vim: set noet sw=4 ts=4:
-diff --git a/external/liborcus/ExternalProject_liborcus.mk b/external/liborcus/ExternalProject_liborcus.mk
-index c7dd76ebfee5..76a2a6afb1f2 100644
---- a/external/liborcus/ExternalProject_liborcus.mk
-+++ b/external/liborcus/ExternalProject_liborcus.mk
-@@ -123,8 +123,8 @@ $(call gb_ExternalProject_get_state_target,liborcus,build) :
- 		   $(MAKE) \
- 		$(if $(filter MACOSX,$(OS)),\
- 			&& $(PERL) $(SRCDIR)/solenv/bin/macosx-change-install-names.pl shl OOO \
--				$(EXTERNAL_WORKDIR)/src/liborcus/.libs/liborcus-0.16.0.dylib \
--				$(EXTERNAL_WORKDIR)/src/parser/.libs/liborcus-parser-0.16.0.dylib \
-+				$(EXTERNAL_WORKDIR)/src/liborcus/.libs/liborcus-0.17.0.dylib \
-+				$(EXTERNAL_WORKDIR)/src/parser/.libs/liborcus-parser-0.17.0.dylib \
- 		) \
- 	)
- 	$(call gb_Trace_EndRange,liborcus,EXTERNAL)
-diff --git a/external/liborcus/Library_orcus-parser.mk b/external/liborcus/Library_orcus-parser.mk
-index 4e46591b98fe..f26657756273 100644
---- a/external/liborcus/Library_orcus-parser.mk
-+++ b/external/liborcus/Library_orcus-parser.mk
-@@ -62,6 +62,7 @@ $(eval $(call gb_Library_add_generated_exception_objects,orcus-parser,\
- 	UnpackedTarball/liborcus/src/parser/string_pool \
- 	UnpackedTarball/liborcus/src/parser/tokens \
- 	UnpackedTarball/liborcus/src/parser/types \
-+	UnpackedTarball/liborcus/src/parser/utf8 \
- 	UnpackedTarball/liborcus/src/parser/xml_namespace \
- 	UnpackedTarball/liborcus/src/parser/xml_writer \
- 	UnpackedTarball/liborcus/src/parser/yaml_parser_base \
-diff --git a/external/liborcus/UnpackedTarball_liborcus.mk b/external/liborcus/UnpackedTarball_liborcus.mk
-index 710d126a8c17..3d2cec42e55e 100644
---- a/external/liborcus/UnpackedTarball_liborcus.mk
-+++ b/external/liborcus/UnpackedTarball_liborcus.mk
-@@ -29,12 +29,11 @@
- 	external/liborcus/gcc9.patch.0 \
- 	external/liborcus/libtool.patch.0 \
- 	external/liborcus/fix-pch.patch.0 \
--	external/liborcus/include.patch.0 \
- 	external/liborcus/liborcus_newline.patch.1 \
--))
--
--$(eval $(call gb_UnpackedTarball_add_patches,liborcus,\
--	external/liborcus/allow-utf-8-in-xml-names.patch \
-+	external/liborcus/remove-unused-parameters.patch.1 \
-+	external/liborcus/unused-variables.patch.1 \
-+	external/liborcus/boost-filesystem.patch.1 \
-+	external/liborcus/std-get-busted.patch.1 \
- 	external/liborcus/forcepoint-83.patch.1 \
- 	external/liborcus/forcepoint-84.patch.1 \
- 	external/liborcus/forcepoint-87.patch.1 \
-diff --git a/external/liborcus/allow-utf-8-in-xml-names.patch b/external/liborcus/allow-utf-8-in-xml-names.patch
-deleted file mode 100644
-index e3430881053d..000000000000
---- a/external/liborcus/allow-utf-8-in-xml-names.patch
-+++ /dev/null
-@@ -1,301 +0,0 @@
--From fa9b6845ed583f5486372c6ffbc59e02a140d303 Mon Sep 17 00:00:00 2001
--From: =?UTF-8?q?Lubo=C5=A1=20Lu=C5=88=C3=A1k?= <l.lunak@centrum.cz>
--Date: Thu, 29 Apr 2021 19:12:20 +0200
--Subject: [PATCH] allow utf-8 in xml names (#137)
--
--https://www.w3.org/TR/2006/REC-xml11-20060816/#NT-NameStartChar
--has a list of all allowed characters.
-----
-- include/orcus/sax_parser_base.hpp |   3 +
-- src/orcus_test_xml.cpp            |   1 +
-- src/parser/sax_parser_base.cpp    | 201 ++++++++++++++++++++++++++++--
-- test/xml/non-ascii/check.txt      |   4 +
-- test/xml/non-ascii/input.xml      |   4 +
-- 5 files changed, 201 insertions(+), 12 deletions(-)
-- create mode 100644 test/xml/non-ascii/check.txt
-- create mode 100644 test/xml/non-ascii/input.xml
--
--diff --git a/include/orcus/sax_parser_base.hpp b/include/orcus/sax_parser_base.hpp
--index 9939e133..8394c07b 100644
----- a/include/orcus/sax_parser_base.hpp
--+++ b/include/orcus/sax_parser_base.hpp
--@@ -218,6 +218,9 @@ protected:
--     void element_name(parser_element& elem, std::ptrdiff_t begin_pos);
--     void attribute_name(pstring& attr_ns, pstring& attr_name);
--     void characters_with_encoded_char(cell_buffer& buf);
--+
--+    int is_name_char();
--+    int is_name_start_char();
-- };
-- 
-- }}
--diff --git a/src/orcus_test_xml.cpp b/src/orcus_test_xml.cpp
--index 8a864d68..35f3dea7 100644
----- a/src/orcus_test_xml.cpp
--+++ b/src/orcus_test_xml.cpp
--@@ -77,6 +77,7 @@ const char* sax_parser_test_dirs[] = {
--     SRCDIR"/test/xml/no-decl-1/",
--     SRCDIR"/test/xml/underscore-identifier/",
--     SRCDIR"/test/xml/self-closing-root/",
--+    SRCDIR"/test/xml/non-ascii/",
-- };
-- 
-- const char* sax_parser_parse_only_test_dirs[] = {
--diff --git a/src/parser/sax_parser_base.cpp b/src/parser/sax_parser_base.cpp
--index 97aa34ec..db51ff94 100644
----- a/src/parser/sax_parser_base.cpp
--+++ b/src/parser/sax_parser_base.cpp
--@@ -328,20 +328,182 @@ bool parser_base::value(pstring& str, bool decode)
--     return transient_stream();
-- }
-- 
--+// https://www.w3.org/TR/2006/REC-xml11-20060816/#NT-NameStartChar
--+// Return length of the character in bytes, otherwise 0.
--+template< bool only_start_name >
--+static
--+int is_name_char_helper(const char* mp_char, const char* mp_end)
--+{
--+    const unsigned char first = mp_char[0];
--+    // Note that ':' technically is an allowed name character, but it is handled separately
--+    // e.g. in element_name(), so here pretend it isn't.
--+    if (/*first == ':' ||*/ first == '_' || (first >= 'A' && first <= 'Z') || (first >= 'a' && first <= 'z'))
--+        return 1;
--+    if (!only_start_name && (first == '-' || first == '.' || (first >= '0' && first <= '9')))
--+        return 1;
--+
--+    if (first < 0x7f) // other ascii characters are not allowed
--+        return 0;
--+    if (mp_end < mp_char + 1)
--+        return 0;
--+    const unsigned char second = mp_char[1];
--+
--+    // 0xb7 = 0xc2 0xb7 utf-8
--+    if (!only_start_name && first == 0xc2 && second == 0xb7)
--+        return 2;
--+
--+    // [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF]
--+    // 0xc0 = 0xc3 0x80 utf-8
--+    if (first < 0xc3)
--+        return 0;
--+    // xd7 = 0xc3 0x97 utf-8, 0xf7 = 0xc3 0xb7 utf-8
--+    if (first == 0xc3)
--+        return second >= 0x80 && second <= 0xff && second != 0x97 && second != 0xb7 ? 2 : 0;
--+    // 0x2ff = 0xcb 0xbf utf-8, 0x300 = 0xcc 0x80 utf-8
--+    if (first >= 0xc4 && first <= 0xcb)
--+        return 2;
--+
--+    // [#x0300-#x036F]
--+    // 0x0300 = 0xcc 0x80 utf-8, 0x36f = 0xcd 0xaf utf-8
--+    if (!only_start_name && first == 0xcc)
--+        return 2;
--+    if (!only_start_name && first == 0xcd && second <= 0xaf)
--+        return 2;
--+
--+    // [#x370-#x37D] | [#x37F-#x1FFF]
--+    // 0x370 = 0xcd 0xb0 utf-8, 0x37e = 0xcd 0xbe
--+    if (first < 0xcd)
--+        return 0;
--+    if (first == 0xcd)
--+        return second >= 0xb0 && second != 0xbe ? 2 : 0;
--+    // 0x07ff = 0xdf 0xbf utf-8 (the last 2-byte utf-8)
--+    if (first <= 0xdf)
--+        return 2;
--+
--+    if (first < 0xe0)
--+        return 0;
--+    if (mp_end < mp_char + 2)
--+        return 0;
--+    const unsigned char third = mp_char[2];
--+
--+    // 0x0800 = 0xe0 0xa0 0x80 utf-8, 0x1fff = 0xe1 0xbf 0xbf utf-8, 0x2000 = 0xe2 0x80 0x80
--+    if (first == 0xe0 || first == 0xe1)
--+        return 3;
--+
--+    // [#x200C-#x200D]
--+    // 0x200c = 0xe2 0x80 0x8c utf-8, 0x200d = 0xe2 0x80 0x8d utf-8
--+    if (first < 0xe2)
--+        return 0;
--+    if (first == 0xe2 && second == 0x80 && (third == 0x8c || third == 0x8d))
--+        return 3;
--+
--+    // [#x203F-#x2040]
--+    // 0x203f = 0xe2 0x80 0xbf utf-8, 0x2040 = 0xe2 0x81 0x80 utf-8
--+    if (!only_start_name && first == 0xe2 && second == 0x80 && third == 0xbf)
--+        return 3;
--+    if (!only_start_name && first == 0xe2 && second == 0x81 && third == 0x80)
--+        return 3;
--+
--+    // [#x2070-#x218F]
--+    // 0x2070 = 0xe2 0x81 0xb0 utf-8, 0x218f = 0xe2 0x86 0x8f utf-8
--+    if (first == 0xe2)
--+    {
--+        if (second < 0x81)
--+            return 0;
--+        if (second >= 0x81 && second < 0x86)
--+            return 3;
--+        if (second == 0x86 && third <= 0x8f)
--+            return 3;
--+    }
--+
--+    // [#x2C00-#x2FEF]
--+    // 0x2c00 = 0xe2 0xb0 0x80 utf-8, 0x2fef = 0xe2 0xbf 0xaf utf-8
--+    if (first == 0xe2)
--+    {
--+        if (second < 0xb0)
--+            return 0;
--+        if (second < 0xbf)
--+            return 3;
--+        if (second == 0xbf && third <= 0xaf)
--+            return 3;
--+    }
--+
--+    // [#x3001-#xD7FF]
--+    // 0x3001 = 0xe3 0x80 0x81 utf-8, 0xd7ff = 0xed 0x9f 0xbf utf-8, 0xd800 = 0xed 0xa0 0x80 utf-8
--+    if (first < 0xe3)
--+        return 0;
--+    if (first < 0xed)
--+        return 3;
--+    if (first == 0xed && second <= 0x9f)
--+        return 3;
--+
--+    // [#xF900-#xFDCF]
--+    // 0xf900 = 0xef 0xa4 0x80 utf-8, 0xfdcf = 0xef 0xb7 0x8f utf-8
--+    if (first == 0xef)
--+    {
--+        if (second < 0xa4)
--+            return 0;
--+        if (second < 0xb7)
--+            return 3;
--+        if (second == 0xb7 && third <= 0x8f)
--+            return 3;
--+    }
--+
--+    // [#xFDF0-#xFFFD]
--+    // 0xfdf0 = 0xef 0xb7 0xb0 utf-8, 0xfffd = 0xef 0xbf 0xbd utf-8
--+    if (first == 0xef)
--+    {
--+        assert(second >= 0xb7);
--+        if (second == 0xb7 && third < 0xb0)
--+            return 0;
--+        if (second < 0xbe)
--+            return 3;
--+        if (second == 0xbf && third <= 0xbd)
--+            return 3;
--+    }
--+
--+    if (first < 0xf0)
--+        return 0;
--+    if (mp_end < mp_char + 3)
--+        return 0;
--+    // const unsigned char fourth = mp_char[3];
--+
--+    // [#x10000-#xEFFFF]
--+    // 0x10000 = 0xf0 0x90 0x80 0x80 utf-8, 0xeffff = 0xf3 0xaf 0xbf 0xbf utf-8,
--+    // 0xf0000 = 0xf3 0xb0 0x80 0x80 utf-8
--+    if (first >= 0xf0 && first < 0xf2)
--+        return 4;
--+    if (first == 0xf3 && second < 0xb0)
--+        return 4;
--+
--+    return 0;
--+}
--+
--+int parser_base::is_name_char()
--+{
--+    return is_name_char_helper<false>(mp_char, mp_end);
--+}
--+
--+int parser_base::is_name_start_char()
--+{
--+    return is_name_char_helper<true>(mp_char, mp_end);
--+}
--+
-- void parser_base::name(pstring& str)
-- {
--     const char* p0 = mp_char;
---    char c = cur_char();
---    if (!is_alpha(c) && c != '_')
--+    int skip = is_name_start_char();
--+    if (skip == 0)
--     {
--         ::std::ostringstream os;
---        os << "name must begin with an alphabet, but got this instead '" << c << "'";
--+        os << "name must begin with an alphabet, but got this instead '" << cur_char() << "'";
--         throw malformed_xml_error(os.str(), offset());
--     }
--+    next(skip);
-- 
-- #if defined(__ORCUS_CPU_FEATURES) && defined(__SSE4_2__)
-- 
---    const __m128i match = _mm_loadu_si128((const __m128i*)"azAZ09--__");
--+    const __m128i match = _mm_loadu_si128((const __m128i*)"azAZ09--__..");
--     const int mode = _SIDD_LEAST_SIGNIFICANT | _SIDD_CMP_RANGES | _SIDD_UBYTE_OPS | _SIDD_NEGATIVE_POLARITY;
-- 
--     size_t n_total = available_size();
--@@ -351,20 +513,35 @@ void parser_base::name(pstring& str)
--         __m128i char_block = _mm_loadu_si128((const __m128i*)mp_char);
-- 
--         int n = std::min<size_t>(16u, n_total);
---        int r = _mm_cmpestri(match, 10, char_block, n, mode);
--+        int r = _mm_cmpestri(match, 12, char_block, n, mode);
--         mp_char += r; // Move the current char position.
--+        n_total -= r;
-- 
---        if (r < 16)
---            // No need to move to the next segment. Stop here.
---            break;
--+        if (r < 16 && n_total)
--+        {
--+            // There is a character that does not match the SSE-based ASCII-only check.
--+            // It may either by an ascii character that is not allowed, in which case stop,
--+            // or it may possibly be an allowed utf-8 character, in which case move over it
--+            // using the slow function.
--+            skip = is_name_char();
--+            if(skip == 0)
--+                break;
--+            next(skip);
--+            n_total -= skip;
--+        }
-- 
---        // Skip 16 chars to the next segment.
---        n_total -= 16;
--     }
--+    cur_char_checked(); // check end of xml stream
-- 
-- #else
---    while (is_alpha(c) || is_numeric(c) || is_name_char(c))
---        c = next_char_checked();
--+    for(;;)
--+    {
--+        cur_char_checked(); // check end of xml stream
--+        skip = is_name_char();
--+        if(skip == 0)
--+            break;
--+        next(skip);
--+    }
-- #endif
-- 
--     str = pstring(p0, mp_char-p0);
--diff --git a/test/xml/non-ascii/check.txt b/test/xml/non-ascii/check.txt
--new file mode 100644
--index 00000000..77b7c003
----- /dev/null
--+++ b/test/xml/non-ascii/check.txt
--@@ -0,0 +1,4 @@
--+/Myšička
--+/Myšička@jméno="Žužla"
--+/Myšička/Nožičky
--+/Myšička/Nožičky"4"
--diff --git a/test/xml/non-ascii/input.xml b/test/xml/non-ascii/input.xml
--new file mode 100644
--index 00000000..c516744b
----- /dev/null
--+++ b/test/xml/non-ascii/input.xml
--@@ -0,0 +1,4 @@
--+<?xml version="1.0" encoding="UTF-8"?>
--+<Myšička jméno="Žužla">
--+   <Nožičky>4</Nožičky>
--+</Myšička>
---- 
--2.26.2
--
-diff --git a/external/liborcus/boost-filesystem.patch.1 b/external/liborcus/boost-filesystem.patch.1
-new file mode 100644
-index 000000000000..14128b4e1c67
---- /dev/null
-+++ b/external/liborcus/boost-filesystem.patch.1
-@@ -0,0 +1,41 @@
-+From e44737bad582fa2a05a23820e49d7930db710412 Mon Sep 17 00:00:00 2001
-+From: Kohei Yoshida <kohei.yoshida@gmail.com>
-+Date: Tue, 2 Nov 2021 21:33:19 -0400
-+Subject: [PATCH] Try using boost::filesystem instead of std::filesystem.
-+
-+std::filesystem still seems unreliable.
-+---
-+ src/parser/stream.cpp | 6 +++---
-+ 1 file changed, 3 insertions(+), 3 deletions(-)
-+
-+diff --git a/src/parser/stream.cpp b/src/parser/stream.cpp
-+index 09855300..00395f59 100644
-+--- a/src/parser/stream.cpp
-++++ b/src/parser/stream.cpp
-+@@ -17,12 +17,12 @@
-+ #include <locale>
-+ #include <codecvt>
-+ #include <iostream>
-+-#include <filesystem>
-+ 
-++#include <boost/filesystem.hpp>
-+ #include <boost/interprocess/file_mapping.hpp>
-+ #include <boost/interprocess/mapped_region.hpp>
-+ 
-+-namespace fs = std::filesystem;
-++namespace fs = boost::filesystem;
-+ namespace bip = boost::interprocess;
-+ 
-+ namespace orcus {
-+@@ -162,7 +162,7 @@ struct file_content::impl
-+     impl() : content_size(0), content(nullptr) {}
-+ 
-+     impl(std::string_view filepath) :
-+-        content_size(fs::file_size(filepath)),
-++        content_size(fs::file_size(std::string{filepath}.c_str())),
-+         mapped_file(std::string{filepath}.c_str(), bip::read_only),
-+         mapped_region(mapped_file, bip::read_only, 0, content_size),
-+         content(nullptr)
-+-- 
-+2.25.1
-+
-diff --git a/external/liborcus/inc/pch/precompiled_orcus-parser.hxx b/external/liborcus/inc/pch/precompiled_orcus-parser.hxx
-index 1427148445d1..a8047d5c9e0a 100644
---- a/external/liborcus/inc/pch/precompiled_orcus-parser.hxx
-+++ b/external/liborcus/inc/pch/precompiled_orcus-parser.hxx
-@@ -69,7 +69,6 @@
- #include <orcus/json_parser_thread.hpp>
- #include <orcus/parser_base.hpp>
- #include <orcus/parser_global.hpp>
--#include <orcus/pstring.hpp>
- #include <orcus/sax_parser_base.hpp>
- #include <orcus/sax_token_parser.hpp>
- #include <orcus/sax_token_parser_thread.hpp>
-diff --git a/external/liborcus/inc/pch/precompiled_orcus.hxx b/external/liborcus/inc/pch/precompiled_orcus.hxx
-index 9edb13aec79b..9543b44eb7c5 100644
---- a/external/liborcus/inc/pch/precompiled_orcus.hxx
-+++ b/external/liborcus/inc/pch/precompiled_orcus.hxx
-@@ -81,7 +81,6 @@
- #include <orcus/orcus_xml.hpp>
- #include <orcus/parser_base.hpp>
- #include <orcus/parser_global.hpp>
--#include <orcus/pstring.hpp>
- #include <orcus/sax_ns_parser.hpp>
- #include <orcus/sax_parser.hpp>
- #include <orcus/sax_parser_base.hpp>
-diff --git a/external/liborcus/include.patch.0 b/external/liborcus/include.patch.0
-deleted file mode 100644
-index a3275b1b13fa..000000000000
---- a/external/liborcus/include.patch.0
-+++ /dev/null
-@@ -1,30 +0,0 @@
----- src/liborcus/orcus_xlsx.cpp
--+++ src/liborcus/orcus_xlsx.cpp
--@@ -32,6 +32,7 @@
-- 
-- #include <cstdlib>
-- #include <iostream>
--+#include <limits>
-- #include <string>
-- #include <cstring>
-- #include <sstream>
----- src/liborcus/xls_xml_context.cpp
--+++ src/liborcus/xls_xml_context.cpp
--@@ -16,6 +16,7 @@
-- #include <mdds/sorted_string_map.hpp>
-- 
-- #include <iostream>
--+#include <limits>
-- 
-- using namespace std;
-- namespace ss = orcus::spreadsheet;
----- src/liborcus/xlsx_revision_context.cpp
--+++ src/liborcus/xlsx_revision_context.cpp
--@@ -16,6 +16,7 @@
-- #include "orcus/global.hpp"
-- 
-- #include <iostream>
--+#include <limits>
-- 
-- using namespace std;
-- 
-diff --git a/external/liborcus/remove-unused-parameters.patch.1 b/external/liborcus/remove-unused-parameters.patch.1
-new file mode 100644
-index 000000000000..251ed804acaf
---- /dev/null
-+++ b/external/liborcus/remove-unused-parameters.patch.1
-@@ -0,0 +1,1209 @@
-+From 5bb64db5ecfd1dc3be3304092f4bdebff54deae5 Mon Sep 17 00:00:00 2001
-+From: Kohei Yoshida <kohei.yoshida@gmail.com>
-+Date: Tue, 2 Nov 2021 19:33:29 -0400
-+Subject: [PATCH] Remove unused parameter warnings.
-+
-+---
-+ doc_example/json_parser_1.cpp                 |  4 +-
-+ ...preadsheet_doc_2_sheets_no_string_pool.cpp | 22 ++++-----
-+ .../spreadsheet_doc_2_sheets_with_formula.cpp | 47 +++++++++----------
-+ ...eadsheet_doc_2_sheets_with_string_pool.cpp | 40 +++++++---------
-+ doc_example/xml_mapping_1.cpp                 |  2 +-
-+ src/liborcus/css_document_tree.cpp            |  3 ++
-+ src/liborcus/dom_tree.cpp                     |  2 +-
-+ src/liborcus/gnumeric_cell_context_test.cpp   | 14 +++---
-+ src/liborcus/json_document_tree.cpp           |  6 +--
-+ src/liborcus/json_structure_mapper.cpp        |  2 +-
-+ src/liborcus/json_structure_tree.cpp          |  4 +-
-+ src/liborcus/mock_spreadsheet.cpp             | 14 +++---
-+ src/liborcus/ods_dde_links_context.cpp        | 10 ++--
-+ src/liborcus/opc_context.cpp                  | 16 +++----
-+ src/liborcus/orcus_json.cpp                   |  4 +-
-+ src/liborcus/orcus_xml_map_def.cpp            |  4 +-
-+ src/liborcus/spreadsheet_interface.cpp        |  4 +-
-+ src/liborcus/xls_xml_context.cpp              | 12 ++---
-+ src/liborcus/xls_xml_detection_handler.cpp    |  2 +-
-+ src/liborcus/xlsx_drawing_context.cpp         |  2 +-
-+ src/liborcus/xlsx_sheet_context.cpp           |  2 +-
-+ src/liborcus/xlsx_sheet_context_test.cpp      |  8 ++--
-+ src/liborcus/xlsx_table_context.cpp           |  2 +-
-+ src/liborcus/xml_structure_tree.cpp           |  6 +--
-+ src/liborcus/xpath_parser_test.cpp            |  2 +-
-+ src/orcus_env_dump.cpp                        |  2 +-
-+ src/orcus_test_json_mapped.cpp                |  2 +-
-+ src/orcus_test_xml.cpp                        |  2 +-
-+ src/orcus_test_xml_mapped.cpp                 |  2 +-
-+ src/parser/sax_token_parser_test.cpp          |  2 +-
-+ src/parser/sax_token_parser_thread.cpp        |  2 +-
-+ src/parser/utf8.cpp                           |  2 +-
-+ src/parser/utf8_test.cpp                      |  2 +-
-+ src/parser/xml_writer_test.cpp                |  2 +-
-+ src/python/cell.cpp                           |  2 +-
-+ src/python/document.cpp                       |  4 +-
-+ src/python/formula_tokens.cpp                 |  2 +-
-+ src/python/global.cpp                         |  2 +-
-+ src/python/json.cpp                           |  4 +-
-+ src/python/named_expression.cpp               |  2 +-
-+ src/python/named_expressions.cpp              |  4 +-
-+ src/python/sheet.cpp                          |  6 +--
-+ src/python/sheet_rows.cpp                     |  2 +-
-+ src/spreadsheet/factory_sheet.cpp             | 18 +++----
-+ src/spreadsheet/sheet_impl.cpp                |  2 +-
-+ 45 files changed, 143 insertions(+), 157 deletions(-)
-+
-+diff --git a/doc_example/json_parser_1.cpp b/doc_example/json_parser_1.cpp
-+index 6fc6de12..832e5176 100644
-+--- a/doc_example/json_parser_1.cpp
-++++ b/doc_example/json_parser_1.cpp
-+@@ -8,12 +8,12 @@ using namespace std;
-+ class json_parser_handler : public orcus::json_handler
-+ {
-+ public:
-+-    void object_key(const char* p, size_t len, bool transient)
-++    void object_key(const char* p, size_t len, bool /*transient*/)
-+     {
-+         cout << "object key: " << std::string_view(p, len) << endl;
-+     }
-+ 
-+-    void string(const char* p, size_t len, bool transient)
-++    void string(const char* p, size_t len, bool /*transient*/)
-+     {
-+         cout << "string: " << std::string_view(p, len) << endl;
-+     }
-+diff --git a/doc_example/spreadsheet_doc_2_sheets_no_string_pool.cpp b/doc_example/spreadsheet_doc_2_sheets_no_string_pool.cpp
-+index 63ffacc3..0aa86caf 100644
-+--- a/doc_example/spreadsheet_doc_2_sheets_no_string_pool.cpp
-++++ b/doc_example/spreadsheet_doc_2_sheets_no_string_pool.cpp
-+@@ -64,22 +64,17 @@ public:
-+     }
-+ 
-+     // We don't implement these methods for now.
-+-    virtual void set_auto(ss::row_t row, ss::col_t col, std::string_view s) override {}
-++    virtual void set_auto(ss::row_t, ss::col_t, std::string_view) override {}
-+ 
-+-    virtual void set_bool(ss::row_t row, ss::col_t col, bool value) override {}
-++    virtual void set_bool(ss::row_t, ss::col_t, bool) override {}
-+ 
-+-    virtual void set_date_time(
-+-        ss::row_t row, ss::col_t col,
-+-        int year, int month, int day, int hour, int minute, double second) override {}
-++    virtual void set_date_time(ss::row_t, ss::col_t, int, int, int, int, int, double) override {}
-+ 
-+-    virtual void set_format(ss::row_t row, ss::col_t col, std::size_t xf_index) override {}
-++    virtual void set_format(ss::row_t, ss::col_t, std::size_t) override {}
-+ 
-+-    virtual void set_format(
-+-        ss::row_t row_start, ss::col_t col_start, ss::row_t row_end, ss::col_t col_end,
-+-        std::size_t xf_index) override {}
-++    virtual void set_format(ss::row_t, ss::col_t, ss::row_t, ss::col_t, std::size_t) override {}
-+ 
-+-    virtual void fill_down_cells(
-+-        ss::row_t src_row, ss::col_t src_col, ss::row_t range_size) override {}
-++    virtual void fill_down_cells(ss::row_t, ss::col_t, ss::row_t) override {}
-+ };
-+ //!code-end: my_sheet
-+ 
-+@@ -89,14 +84,13 @@ class my_import_factory : public ss::iface::import_factory
-+     std::vector<std::unique_ptr<my_sheet>> m_sheets;
-+ 
-+ public:
-+-    virtual ss::iface::import_sheet* append_sheet(
-+-        ss::sheet_t sheet_index, std::string_view name) override
-++    virtual ss::iface::import_sheet* append_sheet(ss::sheet_t, std::string_view) override
-+     {
-+         m_sheets.push_back(std::make_unique<my_sheet>(m_sheets.size()));
-+         return m_sheets.back().get();
-+     }
-+ 
-+-    virtual ss::iface::import_sheet* get_sheet(std::string_view name) override
-++    virtual ss::iface::import_sheet* get_sheet(std::string_view) override
-+     {
-+         // TODO : implement this.
-+         return nullptr;
-+diff --git a/doc_example/spreadsheet_doc_2_sheets_with_formula.cpp b/doc_example/spreadsheet_doc_2_sheets_with_formula.cpp
-+index 1c3f3d5b..11e1932e 100644
-+--- a/doc_example/spreadsheet_doc_2_sheets_with_formula.cpp
-++++ b/doc_example/spreadsheet_doc_2_sheets_with_formula.cpp
-+@@ -87,15 +87,15 @@ public:
-+         m_formula.grammar = grammar;
-+     }
-+ 
-+-    virtual void set_shared_formula_index(std::size_t index) override {}
-++    virtual void set_shared_formula_index(std::size_t) override {}
-+ 
-+-    virtual void set_result_string(std::string_view value) override {}
-++    virtual void set_result_string(std::string_view) override {}
-+ 
-+-    virtual void set_result_value(double value) override {}
-++    virtual void set_result_value(double) override {}
-+ 
-+     virtual void set_result_empty() override {}
-+ 
-+-    virtual void set_result_bool(bool value) override {}
-++    virtual void set_result_bool(bool) override {}
-+ 
-+     virtual void commit() override
-+     {
-+@@ -154,22 +154,17 @@ public:
-+     }
-+ 
-+     // We don't implement these methods for now.
-+-    virtual void set_auto(ss::row_t row, ss::col_t col, std::string_view s) override {}
-++    virtual void set_auto(ss::row_t, ss::col_t, std::string_view) override {}
-+ 
-+-    virtual void set_bool(ss::row_t row, ss::col_t col, bool value) override {}
-++    virtual void set_bool(ss::row_t, ss::col_t, bool) override {}
-+ 
-+-    virtual void set_date_time(
-+-        ss::row_t row, ss::col_t col,
-+-        int year, int month, int day, int hour, int minute, double second) override {}
-++    virtual void set_date_time(ss::row_t, ss::col_t, int, int, int, int, int, double) override {}
-+ 
-+-    virtual void set_format(ss::row_t row, ss::col_t col, std::size_t xf_index) override {}
-++    virtual void set_format(ss::row_t, ss::col_t, std::size_t) override {}
-+ 
-+-    virtual void set_format(
-+-        ss::row_t row_start, ss::col_t col_start, ss::row_t row_end, ss::col_t col_end,
-+-        std::size_t xf_index) override {}
-++    virtual void set_format(ss::row_t, ss::col_t, ss::row_t, ss::col_t, std::size_t) override {}
-+ 
-+-    virtual void fill_down_cells(
-+-        ss::row_t src_row, ss::col_t src_col, ss::row_t range_size) override {}
-++    virtual void fill_down_cells(ss::row_t, ss::col_t, ss::row_t) override {}
-+ 
-+     virtual ss::iface::import_formula* get_formula() override
-+     {
-+@@ -208,21 +203,21 @@ public:
-+     }
-+ 
-+     // The following methods are for formatted text segments, which we ignore for now.
-+-    virtual void set_segment_bold(bool b) override {}
-++    virtual void set_segment_bold(bool) override {}
-+ 
-+-    virtual void set_segment_font(std::size_t font_index) override {}
-++    virtual void set_segment_font(std::size_t) override {}
-+ 
-+     virtual void set_segment_font_color(
-+-        ss::color_elem_t alpha,
-+-        ss::color_elem_t red,
-+-        ss::color_elem_t green,
-+-        ss::color_elem_t blue) override {}
-++        ss::color_elem_t,
-++        ss::color_elem_t,
-++        ss::color_elem_t,
-++        ss::color_elem_t) override {}
-+ 
-+-    virtual void set_segment_font_name(std::string_view s) override {}
-++    virtual void set_segment_font_name(std::string_view) override {}
-+ 
-+-    virtual void set_segment_font_size(double point) override {}
-++    virtual void set_segment_font_size(double) override {}
-+ 
-+-    virtual void set_segment_italic(bool b) override {}
-++    virtual void set_segment_italic(bool) override {}
-+ 
-+     virtual void append_segment(std::string_view s) override
-+     {
-+@@ -256,14 +251,14 @@ public:
-+         return &m_shared_strings;
-+     }
-+ 
-+-    virtual ss::iface::import_sheet* append_sheet(ss::sheet_t sheet_index, std::string_view name) override
-++    virtual ss::iface::import_sheet* append_sheet(ss::sheet_t, std::string_view) override
-+     {
-+         // Pass the string pool to each sheet instance.
-+         m_sheets.push_back(std::make_unique<my_sheet>(m_sheets.size(), m_string_pool));
-+         return m_sheets.back().get();
-+     }
-+ 
-+-    virtual ss::iface::import_sheet* get_sheet(std::string_view name) override
-++    virtual ss::iface::import_sheet* get_sheet(std::string_view) override
-+     {
-+         // TODO : implement this.
-+         return nullptr;
-+diff --git a/doc_example/spreadsheet_doc_2_sheets_with_string_pool.cpp b/doc_example/spreadsheet_doc_2_sheets_with_string_pool.cpp
-+index ff69c835..0153dd08 100644
-+--- a/doc_example/spreadsheet_doc_2_sheets_with_string_pool.cpp
-++++ b/doc_example/spreadsheet_doc_2_sheets_with_string_pool.cpp
-+@@ -70,22 +70,17 @@ public:
-+     }
-+ 
-+     // We don't implement these methods for now.
-+-    virtual void set_auto(ss::row_t row, ss::col_t col, std::string_view s) override {}
-++    virtual void set_auto(ss::row_t, ss::col_t, std::string_view) override {}
-+ 
-+-    virtual void set_bool(ss::row_t row, ss::col_t col, bool value) override {}
-++    virtual void set_bool(ss::row_t, ss::col_t, bool) override {}
-+ 
-+-    virtual void set_date_time(
-+-        ss::row_t row, ss::col_t col,
-+-        int year, int month, int day, int hour, int minute, double second) override {}
-++    virtual void set_date_time(ss::row_t, ss::col_t, int, int, int, int, int, double) override {}
-+ 
-+-    virtual void set_format(ss::row_t row, ss::col_t col, std::size_t xf_index) override {}
-++    virtual void set_format(ss::row_t, ss::col_t, std::size_t) override {}
-+ 
-+-    virtual void set_format(
-+-        ss::row_t row_start, ss::col_t col_start, ss::row_t row_end, ss::col_t col_end,
-+-        std::size_t xf_index) override {}
-++    virtual void set_format(ss::row_t, ss::col_t, ss::row_t, ss::col_t, std::size_t) override {}
-+ 
-+-    virtual void fill_down_cells(
-+-        ss::row_t src_row, ss::col_t src_col, ss::row_t range_size) override {}
-++    virtual void fill_down_cells(ss::row_t, ss::col_t, ss::row_t) override {}
-+ };
-+ 
-+ //!code-start: my_shared_strings
-+@@ -119,21 +114,21 @@ public:
-+     }
-+ 
-+     // The following methods are for formatted text segments, which we ignore for now.
-+-    virtual void set_segment_bold(bool b) override {}
-++    virtual void set_segment_bold(bool) override {}
-+ 
-+-    virtual void set_segment_font(std::size_t font_index) override {}
-++    virtual void set_segment_font(std::size_t) override {}
-+ 
-+     virtual void set_segment_font_color(
-+-        ss::color_elem_t alpha,
-+-        ss::color_elem_t red,
-+-        ss::color_elem_t green,
-+-        ss::color_elem_t blue) override {}
-++        ss::color_elem_t,
-++        ss::color_elem_t,
-++        ss::color_elem_t,
-++        ss::color_elem_t) override {}
-+ 
-+-    virtual void set_segment_font_name(std::string_view s) override {}
-++    virtual void set_segment_font_name(std::string_view) override {}
-+ 
-+-    virtual void set_segment_font_size(double point) override {}
-++    virtual void set_segment_font_size(double) override {}
-+ 
-+-    virtual void set_segment_italic(bool b) override {}
-++    virtual void set_segment_italic(bool) override {}
-+ 
-+     virtual void append_segment(std::string_view s) override
-+     {
-+@@ -169,15 +164,14 @@ public:
-+         return &m_shared_strings;
-+     }
-+ 
-+-    virtual ss::iface::import_sheet* append_sheet(
-+-        ss::sheet_t sheet_index, std::string_view name) override
-++    virtual ss::iface::import_sheet* append_sheet(ss::sheet_t, std::string_view) override
-+     {
-+         // Pass the string pool to each sheet instance.
-+         m_sheets.push_back(std::make_unique<my_sheet>(m_sheets.size(), m_string_pool));
-+         return m_sheets.back().get();
-+     }
-+ 
-+-    virtual ss::iface::import_sheet* get_sheet(std::string_view name) override
-++    virtual ss::iface::import_sheet* get_sheet(std::string_view) override
-+     {
-+         // TODO : implement this.
-+         return nullptr;
-+diff --git a/doc_example/xml_mapping_1.cpp b/doc_example/xml_mapping_1.cpp
-+index f23d620c..33d6ff22 100644
-+--- a/doc_example/xml_mapping_1.cpp
-++++ b/doc_example/xml_mapping_1.cpp
-+@@ -118,7 +118,7 @@ void run_xmlns_different_ns_same_alias()
-+     cout << (alias_1 == alias_2 ? "same" : "different") << endl;
-+ }
-+ 
-+-int main(int argc, char** argv)
-++int main()
-+ {
-+     run_xmlns_example();
-+     run_xmlns_stacked();
-+diff --git a/src/liborcus/css_document_tree.cpp b/src/liborcus/css_document_tree.cpp
-+index 5f84c013..46bf7e91 100644
-+--- a/src/liborcus/css_document_tree.cpp
-++++ b/src/liborcus/css_document_tree.cpp
-+@@ -54,6 +54,9 @@ public:
-+     {
-+ #if ORCUS_DEBUG_CSS_DOCTREE
-+         cout << "@" << string(p, n).c_str();
-++#else
-++        (void)p;
-++        (void)n;
-+ #endif
-+     }
-+ 
-+diff --git a/src/liborcus/dom_tree.cpp b/src/liborcus/dom_tree.cpp
-+index 51db6ef8..64ecf8ef 100644
-+--- a/src/liborcus/dom_tree.cpp
-++++ b/src/liborcus/dom_tree.cpp
-+@@ -527,7 +527,7 @@ void document_tree::impl::end_element(const sax_ns_parser_element& elem)
-+     m_elem_stack.pop_back();
-+ }
-+ 
-+-void document_tree::impl::characters(const pstring& val, bool transient)
-++void document_tree::impl::characters(const pstring& val, bool /*transient*/)
-+ {
-+     if (m_elem_stack.empty())
-+         // No root element has been encountered.  Ignore this.
-+diff --git a/src/liborcus/gnumeric_cell_context_test.cpp b/src/liborcus/gnumeric_cell_context_test.cpp
-+index fc543096..aeec16bd 100644
-+--- a/src/liborcus/gnumeric_cell_context_test.cpp
-++++ b/src/liborcus/gnumeric_cell_context_test.cpp
-+@@ -41,19 +41,19 @@ public:
-+         assert(formula == "=arrayFormula");
-+     }
-+ 
-+-    virtual void set_result_bool(row_t row, col_t col, bool value) override
-++    virtual void set_result_bool(row_t, col_t, bool) override
-+     {
-+     }
-+ 
-+-    virtual void set_result_empty(row_t row, col_t col) override
-++    virtual void set_result_empty(row_t, col_t) override
-+     {
-+     }
-+ 
-+-    virtual void set_result_string(row_t row, col_t col, std::string_view) override
-++    virtual void set_result_string(row_t, col_t, std::string_view) override
-+     {
-+     }
-+ 
-+-    virtual void set_result_value(row_t row, col_t col, double value) override
-++    virtual void set_result_value(row_t, col_t, double) override
-+     {
-+     }
-+ 
-+@@ -77,11 +77,11 @@ public:
-+         assert(formula == "=formula");
-+     }
-+ 
-+-    virtual void set_shared_formula_index(size_t index) override
-++    virtual void set_shared_formula_index(size_t) override
-+     {
-+     }
-+ 
-+-    virtual void set_result_bool(bool value) override
-++    virtual void set_result_bool(bool) override
-+     {
-+     }
-+ 
-+@@ -93,7 +93,7 @@ public:
-+     {
-+     }
-+ 
-+-    virtual void set_result_value(double value) override
-++    virtual void set_result_value(double) override
-+     {
-+     }
-+ 
-+diff --git a/src/liborcus/json_document_tree.cpp b/src/liborcus/json_document_tree.cpp
-+index 4eedea47..c163a364 100644
-+--- a/src/liborcus/json_document_tree.cpp
-++++ b/src/liborcus/json_document_tree.cpp
-+@@ -1217,7 +1217,7 @@ array::array(std::initializer_list<detail::init::node> vs)
-+ array::~array() {}
-+ 
-+ object::object() {}
-+-object::object(object&& other) {}
-++object::object(object&& /*other*/) {}
-+ object::~object() {}
-+ 
-+ namespace {
-+@@ -1388,7 +1388,7 @@ struct node::impl
-+         m_value_array(std::move(array.m_vs))
-+     {}
-+ 
-+-    impl(json::object obj) :
-++    impl(json::object /*obj*/) :
-+         m_type(detail::node_t::object) {}
-+ };
-+ 
-+@@ -1634,7 +1634,7 @@ document_tree::document_tree(array vs) : mp_impl(std::make_unique<impl>())
-+     }
-+ }
-+ 
-+-document_tree::document_tree(object obj) : mp_impl(std::make_unique<impl>())
-++document_tree::document_tree(object /*obj*/) : mp_impl(std::make_unique<impl>())
-+ {
-+     mp_impl->m_root = mp_impl->m_res.obj_pool.construct(detail::node_t::object);
-+     mp_impl->m_root->value.object = mp_impl->m_res.obj_pool_jvo.construct();
-+diff --git a/src/liborcus/json_structure_mapper.cpp b/src/liborcus/json_structure_mapper.cpp
-+index 111d1674..09a9e97e 100644
-+--- a/src/liborcus/json_structure_mapper.cpp
-++++ b/src/liborcus/json_structure_mapper.cpp
-+@@ -40,7 +40,7 @@ void structure_mapper::push_range()
-+     m_current_range.row_groups.clear();
-+ }
-+ 
-+-void structure_mapper::traverse(size_t pos)
-++void structure_mapper::traverse(size_t /*pos*/)
-+ {
-+     json::structure_tree::node_properties node = m_walker.get_node();
-+ 
-+diff --git a/src/liborcus/json_structure_tree.cpp b/src/liborcus/json_structure_tree.cpp
-+index 5c9d600c..3ae8ecc0 100644
-+--- a/src/liborcus/json_structure_tree.cpp
-++++ b/src/liborcus/json_structure_tree.cpp
-+@@ -235,12 +235,12 @@ struct structure_tree::impl
-+         push_value();
-+     }
-+ 
-+-    void string(const char* p, size_t len, bool transient)
-++    void string(const char* /*p*/, size_t /*len*/, bool /*transient*/)
-+     {
-+         push_value();
-+     }
-+ 
-+-    void number(double val)
-++    void number(double /*val*/)
-+     {
-+         push_value();
-+     }
-+diff --git a/src/liborcus/mock_spreadsheet.cpp b/src/liborcus/mock_spreadsheet.cpp
-+index 3bde38ff..4042bdc9 100644
-+--- a/src/liborcus/mock_spreadsheet.cpp
-++++ b/src/liborcus/mock_spreadsheet.cpp
-+@@ -211,22 +211,22 @@ import_formula::~import_formula()
-+ {
-+ }
-+ 
-+-void import_formula::set_position(row_t row, col_t col)
-++void import_formula::set_position(row_t, col_t)
-+ {
-+     assert(false);
-+ }
-+ 
-+-void import_formula::set_formula(formula_grammar_t grammar, std::string_view)
-++void import_formula::set_formula(formula_grammar_t, std::string_view)
-+ {
-+     assert(false);
-+ }
-+ 
-+-void import_formula::set_shared_formula_index(size_t index)
-++void import_formula::set_shared_formula_index(size_t)
-+ {
-+     assert(false);
-+ }
-+ 
-+-void import_formula::set_result_value(double value)
-++void import_formula::set_result_value(double)
-+ {
-+     assert(false);
-+ }
-+@@ -236,7 +236,7 @@ void import_formula::set_result_string(std::string_view)
-+     assert(false);
-+ }
-+ 
-+-void import_formula::set_result_bool(bool value)
-++void import_formula::set_result_bool(bool)
-+ {
-+     assert(false);
-+ }
-+@@ -257,7 +257,7 @@ import_sheet::~import_sheet()
-+ {
-+ }
-+ 
-+-void import_sheet::set_auto(row_t, col_t, std::string_view s)
-++void import_sheet::set_auto(row_t, col_t, std::string_view)
-+ {
-+     assert(false);
-+ }
-+@@ -292,7 +292,7 @@ void import_sheet::set_format(row_t, col_t, row_t, col_t, size_t)
-+     assert(false);
-+ }
-+ 
-+-void import_sheet::fill_down_cells(row_t src_row, col_t src_col, row_t range_size)
-++void import_sheet::fill_down_cells(row_t, col_t, row_t)
-+ {
-+     assert(false);
-+ }
-+diff --git a/src/liborcus/ods_dde_links_context.cpp b/src/liborcus/ods_dde_links_context.cpp
-+index db7ab672..783b106f 100644
-+--- a/src/liborcus/ods_dde_links_context.cpp
-++++ b/src/liborcus/ods_dde_links_context.cpp
-+@@ -14,21 +14,21 @@ ods_dde_links_context::ods_dde_links_context(session_context& session_cxt, const
-+ 
-+ ods_dde_links_context::~ods_dde_links_context() {}
-+ 
-+-bool ods_dde_links_context::can_handle_element(xmlns_id_t ns, xml_token_t name) const
-++bool ods_dde_links_context::can_handle_element(xmlns_id_t /*ns*/, xml_token_t /*name*/) const
-+ {
-+     return true;
-+ }
-+ 
-+-xml_context_base* ods_dde_links_context::create_child_context(xmlns_id_t ns, xml_token_t name)
-++xml_context_base* ods_dde_links_context::create_child_context(xmlns_id_t /*ns*/, xml_token_t /*name*/)
-+ {
-+     return nullptr;
-+ }
-+ 
-+-void ods_dde_links_context::end_child_context(xmlns_id_t ns, xml_token_t name, xml_context_base *child)
-++void ods_dde_links_context::end_child_context(xmlns_id_t /*ns*/, xml_token_t /*name*/, xml_context_base* /*child*/)
-+ {
-+ }
-+ 
-+-void ods_dde_links_context::start_element(xmlns_id_t ns, xml_token_t name, const::std::vector<xml_token_attr_t> &attrs)
-++void ods_dde_links_context::start_element(xmlns_id_t ns, xml_token_t name, const::std::vector<xml_token_attr_t>& /*attrs*/)
-+ {
-+     xml_token_pair_t parent = push_stack(ns, name);
-+     (void)parent;
-+@@ -41,7 +41,7 @@ bool ods_dde_links_context::end_element(xmlns_id_t ns, xml_token_t name)
-+     return pop_stack(ns, name);
-+ }
-+ 
-+-void ods_dde_links_context::characters(const pstring &str, bool transient)
-++void ods_dde_links_context::characters(const pstring& /*str*/, bool /*transient*/)
-+ {
-+ }
-+ 
-+diff --git a/src/liborcus/opc_context.cpp b/src/liborcus/opc_context.cpp
-+index ef1a591f..d3cddabd 100644
-+--- a/src/liborcus/opc_context.cpp
-++++ b/src/liborcus/opc_context.cpp
-+@@ -90,17 +90,17 @@ opc_content_types_context::~opc_content_types_context()
-+ {
-+ }
-+ 
-+-bool opc_content_types_context::can_handle_element(xmlns_id_t ns, xml_token_t name) const
-++bool opc_content_types_context::can_handle_element(xmlns_id_t /*ns*/, xml_token_t /*name*/) const
-+ {
-+     return true;
-+ }
-+ 
-+-xml_context_base* opc_content_types_context::create_child_context(xmlns_id_t ns, xml_token_t name)
-++xml_context_base* opc_content_types_context::create_child_context(xmlns_id_t /*ns*/, xml_token_t /*name*/)
-+ {
-+     return nullptr;
-+ }
-+ 
-+-void opc_content_types_context::end_child_context(xmlns_id_t ns, xml_token_t name, xml_context_base *child)
-++void opc_content_types_context::end_child_context(xmlns_id_t /*ns*/, xml_token_t /*name*/, xml_context_base* /*child*/)
-+ {
-+ }
-+ 
-+@@ -153,7 +153,7 @@ bool opc_content_types_context::end_element(xmlns_id_t ns, xml_token_t name)
-+     return pop_stack(ns, name);
-+ }
-+ 
-+-void opc_content_types_context::characters(const pstring &str, bool transient)
-++void opc_content_types_context::characters(const pstring& /*str*/, bool /*transient*/)
-+ {
-+ }
-+ 
-+@@ -256,17 +256,17 @@ opc_relations_context::~opc_relations_context()
-+ {
-+ }
-+ 
-+-bool opc_relations_context::can_handle_element(xmlns_id_t ns, xml_token_t name) const
-++bool opc_relations_context::can_handle_element(xmlns_id_t /*ns*/, xml_token_t /*name*/) const
-+ {
-+     return true;
-+ }
-+ 
-+-xml_context_base* opc_relations_context::create_child_context(xmlns_id_t ns, xml_token_t name)
-++xml_context_base* opc_relations_context::create_child_context(xmlns_id_t /*ns*/, xml_token_t /*name*/)
-+ {
-+     return nullptr;
-+ }
-+ 
-+-void opc_relations_context::end_child_context(xmlns_id_t ns, xml_token_t name, xml_context_base *child)
-++void opc_relations_context::end_child_context(xmlns_id_t /*ns*/, xml_token_t /*name*/, xml_context_base* /*child*/)
-+ {
-+ }
-+ 
-+@@ -302,7 +302,7 @@ bool opc_relations_context::end_element(xmlns_id_t ns, xml_token_t name)
-+     return pop_stack(ns, name);
-+ }
-+ 
-+-void opc_relations_context::characters(const pstring &str, bool transient)
-++void opc_relations_context::characters(const pstring& /*str*/, bool /*transient*/)
-+ {
-+ }
-+ 
-+diff --git a/src/liborcus/orcus_json.cpp b/src/liborcus/orcus_json.cpp
-+index 2b5967d5..69672190 100644
-+--- a/src/liborcus/orcus_json.cpp
-++++ b/src/liborcus/orcus_json.cpp
-+@@ -137,7 +137,7 @@ public:
-+         push_node(json_map_tree::input_node_type::object);
-+     }
-+ 
-+-    void object_key(const char* p, size_t len, bool transient)
-++    void object_key(const char* p, size_t len, bool /*transient*/)
-+     {
-+         m_walker.set_object_key(p, len);
-+     }
-+@@ -168,7 +168,7 @@ public:
-+         pop_node(json_map_tree::input_node_type::value);
-+     }
-+ 
-+-    void string(const char* p, size_t len, bool transient)
-++    void string(const char* p, size_t len, bool /*transient*/)
-+     {
-+         push_node(json_map_tree::input_node_type::value);
-+         commit_value(json_value(p, len));
-+diff --git a/src/liborcus/orcus_xml_map_def.cpp b/src/liborcus/orcus_xml_map_def.cpp
-+index 4c70e060..889dbcb0 100644
-+--- a/src/liborcus/orcus_xml_map_def.cpp
-++++ b/src/liborcus/orcus_xml_map_def.cpp
-+@@ -43,9 +43,9 @@ public:
-+     xml_map_sax_handler(orcus_xml& app) : m_app(app) {}
-+ 
-+     void doctype(const sax::doctype_declaration&) {}
-+-    void start_declaration(const pstring& name) {}
-++    void start_declaration(const pstring& /*name*/) {}
-+ 
-+-    void end_declaration(const pstring& name)
-++    void end_declaration(const pstring& /*name*/)
-+     {
-+         m_attrs.clear();
-+     }
-+diff --git a/src/liborcus/spreadsheet_interface.cpp b/src/liborcus/spreadsheet_interface.cpp
-+index 87103233..985caf45 100644
-+--- a/src/liborcus/spreadsheet_interface.cpp
-++++ b/src/liborcus/spreadsheet_interface.cpp
-+@@ -124,13 +124,13 @@ import_reference_resolver* import_factory::get_reference_resolver(formula_ref_co
-+ }
-+ 
-+ import_pivot_cache_definition* import_factory::create_pivot_cache_definition(
-+-        orcus::spreadsheet::pivot_cache_id_t cache_id)
-++        orcus::spreadsheet::pivot_cache_id_t /*cache_id*/)
-+ {
-+     return nullptr;
-+ }
-+ 
-+ import_pivot_cache_records* import_factory::create_pivot_cache_records(
-+-        orcus::spreadsheet::pivot_cache_id_t cache_id)
-++        orcus::spreadsheet::pivot_cache_id_t /*cache_id*/)
-+ {
-+     return nullptr;
-+ }
-+diff --git a/src/liborcus/xls_xml_context.cpp b/src/liborcus/xls_xml_context.cpp
-+index f5b8fe26..b2d6d398 100644
-+--- a/src/liborcus/xls_xml_context.cpp
-++++ b/src/liborcus/xls_xml_context.cpp
-+@@ -90,17 +90,17 @@ xls_xml_data_context::xls_xml_data_context(
-+ 
-+ xls_xml_data_context::~xls_xml_data_context() {}
-+ 
-+-bool xls_xml_data_context::can_handle_element(xmlns_id_t ns, xml_token_t name) const
-++bool xls_xml_data_context::can_handle_element(xmlns_id_t /*ns*/, xml_token_t /*name*/) const
-+ {
-+     return true;
-+ }
-+ 
-+-xml_context_base* xls_xml_data_context::create_child_context(xmlns_id_t ns, xml_token_t name)
-++xml_context_base* xls_xml_data_context::create_child_context(xmlns_id_t /*ns*/, xml_token_t /*name*/)
-+ {
-+     return nullptr;
-+ }
-+ 
-+-void xls_xml_data_context::end_child_context(xmlns_id_t ns, xml_token_t name, xml_context_base* child)
-++void xls_xml_data_context::end_child_context(xmlns_id_t /*ns*/, xml_token_t /*name*/, xml_context_base* /*child*/)
-+ {
-+ }
-+ 
-+@@ -254,7 +254,7 @@ void xls_xml_data_context::reset()
-+ }
-+ 
-+ void xls_xml_data_context::start_element_data(
-+-    const xml_token_pair_t& parent, const xml_attrs_t& attrs)
-++    const xml_token_pair_t& /*parent*/, const xml_attrs_t& attrs)
-+ {
-+     m_cell_type = ct_unknown;
-+     m_cell_string.clear();
-+@@ -776,7 +776,7 @@ xml_context_base* xls_xml_context::create_child_context(xmlns_id_t ns, xml_token
-+     return nullptr;
-+ }
-+ 
-+-void xls_xml_context::end_child_context(xmlns_id_t ns, xml_token_t name, xml_context_base* child)
-++void xls_xml_context::end_child_context(xmlns_id_t /*ns*/, xml_token_t /*name*/, xml_context_base* /*child*/)
-+ {
-+ }
-+ 
-+@@ -1217,7 +1217,7 @@ void xls_xml_context::characters(const pstring& str, bool /*transient*/)
-+     }
-+ }
-+ 
-+-void xls_xml_context::start_element_borders(const xml_token_pair_t& parent, const xml_attrs_t& attrs)
-++void xls_xml_context::start_element_borders(const xml_token_pair_t& parent, const xml_attrs_t& /*attrs*/)
-+ {
-+     xml_element_expected(parent, NS_xls_xml_ss, XML_Style);
-+     m_current_style->borders.clear();
-+diff --git a/src/liborcus/xls_xml_detection_handler.cpp b/src/liborcus/xls_xml_detection_handler.cpp
-+index aaa1b148..2b18c8ee 100644
-+--- a/src/liborcus/xls_xml_detection_handler.cpp
-++++ b/src/liborcus/xls_xml_detection_handler.cpp
-+@@ -36,7 +36,7 @@ public:
-+         return nullptr;
-+     }
-+ 
-+-    virtual void start_element(xmlns_id_t ns, xml_token_t name, const::std::vector<xml_token_attr_t>& attrs)
-++    virtual void start_element(xmlns_id_t ns, xml_token_t name, const::std::vector<xml_token_attr_t>& /*attrs*/)
-+     {
-+         xml_token_pair_t parent = push_stack(ns, name);
-+         if (ns == NS_xls_xml_ss)
-+diff --git a/src/liborcus/xlsx_drawing_context.cpp b/src/liborcus/xlsx_drawing_context.cpp
-+index f7dc31ab..380d7852 100644
-+--- a/src/liborcus/xlsx_drawing_context.cpp
-++++ b/src/liborcus/xlsx_drawing_context.cpp
-+@@ -41,7 +41,7 @@ void xlsx_drawing_context::end_child_context(xmlns_id_t /*ns*/, xml_token_t /*na
-+ {
-+ }
-+ 
-+-void xlsx_drawing_context::start_element(xmlns_id_t ns, xml_token_t name, const::std::vector<xml_token_attr_t>& attrs)
-++void xlsx_drawing_context::start_element(xmlns_id_t ns, xml_token_t name, const::std::vector<xml_token_attr_t>& /*attrs*/)
-+ {
-+     xml_token_pair_t parent = push_stack(ns, name);
-+ 
-+diff --git a/src/liborcus/xlsx_sheet_context.cpp b/src/liborcus/xlsx_sheet_context.cpp
-+index 669f604f..50018c32 100644
-+--- a/src/liborcus/xlsx_sheet_context.cpp
-++++ b/src/liborcus/xlsx_sheet_context.cpp
-+@@ -845,7 +845,7 @@ void xlsx_sheet_context::push_raw_cell_value()
-+ }
-+ 
-+ void xlsx_sheet_context::push_raw_cell_result(
-+-    range_formula_results& res, size_t row_offset, size_t col_offset, xlsx_session_data& session_data) const
-++    range_formula_results& res, size_t row_offset, size_t col_offset, xlsx_session_data& /*session_data*/) const
-+ {
-+     if (m_cur_value.empty())
-+         return;
-+diff --git a/src/liborcus/xlsx_sheet_context_test.cpp b/src/liborcus/xlsx_sheet_context_test.cpp
-+index 9cb0d2a5..11ec8b71 100644
-+--- a/src/liborcus/xlsx_sheet_context_test.cpp
-++++ b/src/liborcus/xlsx_sheet_context_test.cpp
-+@@ -64,19 +64,19 @@ public:
-+         assert(formula == "A1:A2");
-+     }
-+ 
-+-    virtual void set_result_bool(row_t row, col_t col, bool value) override
-++    virtual void set_result_bool(row_t, col_t, bool) override
-+     {
-+     }
-+ 
-+-    virtual void set_result_empty(row_t row, col_t col) override
-++    virtual void set_result_empty(row_t, col_t) override
-+     {
-+     }
-+ 
-+-    virtual void set_result_string(row_t row, col_t col, std::string_view) override
-++    virtual void set_result_string(row_t, col_t, std::string_view) override
-+     {
-+     }
-+ 
-+-    virtual void set_result_value(row_t row, col_t col, double value) override
-++    virtual void set_result_value(row_t, col_t, double) override
-+     {
-+     }
-+ 
-+diff --git a/src/liborcus/xlsx_table_context.cpp b/src/liborcus/xlsx_table_context.cpp
-+index e135f44d..d8c360df 100644
-+--- a/src/liborcus/xlsx_table_context.cpp
-++++ b/src/liborcus/xlsx_table_context.cpp
-+@@ -317,7 +317,7 @@ bool xlsx_table_context::end_element(xmlns_id_t ns, xml_token_t name)
-+     return pop_stack(ns, name);
-+ }
-+ 
-+-void xlsx_table_context::characters(const pstring& str, bool transient)
-++void xlsx_table_context::characters(const pstring& /*str*/, bool /*transient*/)
-+ {
-+ }
-+ 
-+diff --git a/src/liborcus/xml_structure_tree.cpp b/src/liborcus/xml_structure_tree.cpp
-+index 9eaf3c07..5185049e 100644
-+--- a/src/liborcus/xml_structure_tree.cpp
-++++ b/src/liborcus/xml_structure_tree.cpp
-+@@ -125,11 +125,11 @@ public:
-+ 
-+     void doctype(const sax::doctype_declaration&) {}
-+ 
-+-    void start_declaration(const pstring& name)
-++    void start_declaration(const pstring& /*name*/)
-+     {
-+     }
-+ 
-+-    void end_declaration(const pstring& name)
-++    void end_declaration(const pstring& /*name*/)
-+     {
-+         m_attrs.clear();
-+     }
-+@@ -185,7 +185,7 @@ public:
-+         m_stack.push_back(ref);
-+     }
-+ 
-+-    void end_element(const sax_ns_parser_element& elem)
-++    void end_element(const sax_ns_parser_element& /*elem*/)
-+     {
-+         if (m_stack.empty())
-+             throw general_error("Element stack is empty.");
-+diff --git a/src/liborcus/xpath_parser_test.cpp b/src/liborcus/xpath_parser_test.cpp
-+index 12242f62..f67c0dc6 100644
-+--- a/src/liborcus/xpath_parser_test.cpp
-++++ b/src/liborcus/xpath_parser_test.cpp
-+@@ -64,7 +64,7 @@ void test_attributes()
-+     assert(token.attribute);
-+ }
-+ 
-+-int main(int argc, char** argv)
-++int main()
-+ {
-+     test_elements();
-+     test_attributes();
-+diff --git a/src/orcus_env_dump.cpp b/src/orcus_env_dump.cpp
-+index ad60927a..99f53718 100644
-+--- a/src/orcus_env_dump.cpp
-++++ b/src/orcus_env_dump.cpp
-+@@ -13,7 +13,7 @@
-+ using std::cout;
-+ using std::endl;
-+ 
-+-int main(int argc, char** argv)
-++int main()
-+ {
-+     cout << "CPU flags:" << endl;
-+     cout << "  SSE 4.2: " << orcus::detail::cpu::has_sse42() << endl;
-+diff --git a/src/orcus_test_json_mapped.cpp b/src/orcus_test_json_mapped.cpp
-+index ed10a842..c504e156 100644
-+--- a/src/orcus_test_json_mapped.cpp
-++++ b/src/orcus_test_json_mapped.cpp
-+@@ -88,7 +88,7 @@ void test_invalid_map_definition()
-+     }
-+ }
-+ 
-+-int main(int argc, char** argv)
-++int main()
-+ {
-+     test_mapped_json_import();
-+     test_invalid_map_definition();
-+diff --git a/src/orcus_test_xml.cpp b/src/orcus_test_xml.cpp
-+index 2a44a8ac..de5197cf 100644
-+--- a/src/orcus_test_xml.cpp
-++++ b/src/orcus_test_xml.cpp
-+@@ -85,7 +85,7 @@ const char* sax_parser_parse_only_test_dirs[] = {
-+     SRCDIR"/test/xml/parse-only/rss/"
-+ };
-+ 
-+-void parse_file(dom::document_tree& tree, const char* filepath, string& strm)
-++void parse_file(dom::document_tree& tree, const char* filepath, std::string& /*strm*/)
-+ {
-+     cout << "testing " << filepath << endl;
-+     file_content content(filepath);
-+diff --git a/src/orcus_test_xml_mapped.cpp b/src/orcus_test_xml_mapped.cpp
-+index b90ea020..8e18cfda 100644
-+--- a/src/orcus_test_xml_mapped.cpp
-++++ b/src/orcus_test_xml_mapped.cpp
-+@@ -66,7 +66,7 @@ void test_mapped_xml_import()
-+         { SRCDIR"/test/xml-mapped/nested-repeats-4", false },
-+     };
-+ 
-+-    auto dump_xml_structure = [](string& dump_content, string& strm, const char* filepath, xmlns_context& cxt)
-++    auto dump_xml_structure = [](std::string& dump_content, std::string& /*strm*/, const char* filepath, xmlns_context& cxt)
-+     {
-+         file_content content(filepath);
-+         dom::document_tree tree(cxt);
-+diff --git a/src/parser/sax_token_parser_test.cpp b/src/parser/sax_token_parser_test.cpp
-+index 2647444c..6ff8c932 100644
-+--- a/src/parser/sax_token_parser_test.cpp
-++++ b/src/parser/sax_token_parser_test.cpp
-+@@ -146,7 +146,7 @@ void test_unicode_string()
-+         {
-+         }
-+ 
-+-        void characters(std::string_view val, bool transient)
-++        void characters(std::string_view val, bool /*transient*/)
-+         {
-+             std::cout << "charachters:" << std::endl;
-+             std::cout << val << std::endl;
-+diff --git a/src/parser/sax_token_parser_thread.cpp b/src/parser/sax_token_parser_thread.cpp
-+index b9166e3c..d21ae6d7 100644
-+--- a/src/parser/sax_token_parser_thread.cpp
-++++ b/src/parser/sax_token_parser_thread.cpp
-+@@ -86,7 +86,7 @@ struct parser_thread::impl
-+         m_token_buffer.abort();
-+     }
-+ 
-+-    void declaration(const orcus::xml_declaration_t& decl)
-++    void declaration(const orcus::xml_declaration_t& /*decl*/)
-+     {
-+     }
-+ 
-+diff --git a/src/parser/utf8.cpp b/src/parser/utf8.cpp
-+index f3b264a7..e02d2244 100644
-+--- a/src/parser/utf8.cpp
-++++ b/src/parser/utf8.cpp
-+@@ -231,7 +231,7 @@ bool parse_3b_second_char(uint8_t c1, uint8_t c2, uint8_t c3)
-+ }
-+ 
-+ // [#x10000-#xEFFFF]:  F0 90 80 80 -> F3 AF BF BF
-+-bool parse_4b_char(uint8_t c1, uint8_t c2, uint8_t c3, uint8_t c4)
-++bool parse_4b_char(uint8_t c1, uint8_t c2, uint8_t /*c3*/, uint8_t /*c4*/)
-+ {
-+     // F0 90 80 80 -> F3 AF BF BF
-+     //  - F0 90 xx xx -> F0 xx xx xx
-+diff --git a/src/parser/utf8_test.cpp b/src/parser/utf8_test.cpp
-+index 78b7656a..88dcd3e8 100644
-+--- a/src/parser/utf8_test.cpp
-++++ b/src/parser/utf8_test.cpp
-+@@ -159,7 +159,7 @@ void test_xml_name_char()
-+     assert(res);
-+ }
-+ 
-+-int main(int argc, char** argv)
-++int main()
-+ {
-+     test_xml_name_start_char();
-+     test_xml_name_char();
-+diff --git a/src/parser/xml_writer_test.cpp b/src/parser/xml_writer_test.cpp
-+index e5a22357..8687db32 100644
-+--- a/src/parser/xml_writer_test.cpp
-++++ b/src/parser/xml_writer_test.cpp
-+@@ -28,7 +28,7 @@ void test_encoded_content()
-+     {
-+         std::ostringstream os_content;
-+ 
-+-        void characters(std::string_view val, bool transient)
-++        void characters(std::string_view val, bool /*transient*/)
-+         {
-+             os_content << val;
-+         }
-+diff --git a/src/python/cell.cpp b/src/python/cell.cpp
-+index 536b5c4d..16374b8f 100644
-+--- a/src/python/cell.cpp
-++++ b/src/python/cell.cpp
-+@@ -115,7 +115,7 @@ int tp_init(pyobj_cell* self, PyObject* args, PyObject* kwargs)
-+     return 0;
-+ }
-+ 
-+-PyObject* cell_get_formula_tokens(PyObject* self, PyObject* args, PyObject* kwargs)
-++PyObject* cell_get_formula_tokens(PyObject* self, PyObject* /*args*/, PyObject* /*kwargs*/)
-+ {
-+     pyobj_cell* obj = reinterpret_cast<pyobj_cell*>(self);
-+     cell_data& data = *obj->data;
-+diff --git a/src/python/document.cpp b/src/python/document.cpp
-+index b06463bc..02a2dc49 100644
-+--- a/src/python/document.cpp
-++++ b/src/python/document.cpp
-+@@ -69,12 +69,12 @@ PyObject* tp_new(PyTypeObject* type, PyObject* /*args*/, PyObject* /*kwargs*/)
-+     return reinterpret_cast<PyObject*>(self);
-+ }
-+ 
-+-int tp_init(pyobj_document* self, PyObject* /*args*/, PyObject* /*kwargs*/)
-++int tp_init(pyobj_document* /*self*/, PyObject* /*args*/, PyObject* /*kwargs*/)
-+ {
-+     return 0;
-+ }
-+ 
-+-PyObject* doc_get_named_expressions(PyObject* self, PyObject* args, PyObject* kwargs)
-++PyObject* doc_get_named_expressions(PyObject* self, PyObject* /*args*/, PyObject* /*kwargs*/)
-+ {
-+     const ss::document& doc = *t(self)->data->m_doc;
-+     const ixion::model_context& cxt = doc.get_model_context();
-+diff --git a/src/python/formula_tokens.cpp b/src/python/formula_tokens.cpp
-+index 569d1a7a..3eece2d4 100644
-+--- a/src/python/formula_tokens.cpp
-++++ b/src/python/formula_tokens.cpp
-+@@ -56,7 +56,7 @@ void tp_dealloc(pyobj_formula_tokens* self)
-+     Py_TYPE(self)->tp_free(reinterpret_cast<PyObject*>(self));
-+ }
-+ 
-+-int tp_init(pyobj_formula_tokens* self, PyObject* /*args*/, PyObject* /*kwargs*/)
-++int tp_init(pyobj_formula_tokens* /*self*/, PyObject* /*args*/, PyObject* /*kwargs*/)
-+ {
-+     return 0;
-+ }
-+diff --git a/src/python/global.cpp b/src/python/global.cpp
-+index 7a21f960..f8623e0d 100644
-+--- a/src/python/global.cpp
-++++ b/src/python/global.cpp
-+@@ -16,7 +16,7 @@ void set_python_exception(PyObject* type, const std::exception& e)
-+ {
-+     std::ostringstream os;
-+     os << "C++ exception caught: " << e.what();
-+-    PyErr_SetString(PyExc_RuntimeError, os.str().data());
-++    PyErr_SetString(type, os.str().data());
-+ }
-+ 
-+ PyObject* get_python_enum_value(const char* enum_class_name, const char* value_name)
-+diff --git a/src/python/json.cpp b/src/python/json.cpp
-+index fdeea10c..f22cf666 100644
-+--- a/src/python/json.cpp
-++++ b/src/python/json.cpp
-+@@ -177,7 +177,7 @@ public:
-+         }
-+     }
-+ 
-+-    void object_key(const char* p, size_t len, bool transient)
-++    void object_key(const char* p, size_t len, bool /*transient*/)
-+     {
-+         parser_stack& cur = m_stack.back();
-+         cur.key = PyUnicode_FromStringAndSize(p, len);
-+@@ -213,7 +213,7 @@ public:
-+         push_value(Py_None);
-+     }
-+ 
-+-    void string(const char* p, size_t len, bool transient)
-++    void string(const char* p, size_t len, bool /*transient*/)
-+     {
-+         push_value(PyUnicode_FromStringAndSize(p, len));
-+     }
-+diff --git a/src/python/named_expression.cpp b/src/python/named_expression.cpp
-+index 8edeeacf..1402daa0 100644
-+--- a/src/python/named_expression.cpp
-++++ b/src/python/named_expression.cpp
-+@@ -81,7 +81,7 @@ PyObject* tp_new(PyTypeObject* type, PyObject* /*args*/, PyObject* /*kwargs*/)
-+     return reinterpret_cast<PyObject*>(self);
-+ }
-+ 
-+-PyObject* ne_get_formula_tokens(PyObject* self, PyObject* args, PyObject* kwargs)
-++PyObject* ne_get_formula_tokens(PyObject* self, PyObject* /*args*/, PyObject* /*kwargs*/)
-+ {
-+     named_exp_data& data = *t(self)->data;
-+     if (!data.tokens)
-+diff --git a/src/python/named_expressions.cpp b/src/python/named_expressions.cpp
-+index 235389ac..6faffee5 100644
-+--- a/src/python/named_expressions.cpp
-++++ b/src/python/named_expressions.cpp
-+@@ -44,7 +44,7 @@ inline pyobj_named_exps* t(PyObject* self)
-+     return reinterpret_cast<pyobj_named_exps*>(self);
-+ }
-+ 
-+-PyObject* named_exps_names(PyObject* self, PyObject* args, PyObject* kwargs)
-++PyObject* named_exps_names(PyObject* self, PyObject* /*args*/, PyObject* /*kwargs*/)
-+ {
-+     named_exps_data& data = *t(self)->data;
-+     PyObject* s = PySet_New(nullptr);
-+@@ -64,7 +64,7 @@ void tp_dealloc(pyobj_named_exps* self)
-+     Py_TYPE(self)->tp_free(reinterpret_cast<PyObject*>(self));
-+ }
-+ 
-+-int tp_init(pyobj_named_exps* self, PyObject* /*args*/, PyObject* /*kwargs*/)
-++int tp_init(pyobj_named_exps* /*self*/, PyObject* /*args*/, PyObject* /*kwargs*/)
-+ {
-+     return 0;
-+ }
-+diff --git a/src/python/sheet.cpp b/src/python/sheet.cpp
-+index 0ccc39bd..38b96241 100644
-+--- a/src/python/sheet.cpp
-++++ b/src/python/sheet.cpp
-+@@ -85,12 +85,12 @@ PyObject* tp_new(PyTypeObject* type, PyObject* /*args*/, PyObject* /*kwargs*/)
-+     return reinterpret_cast<PyObject*>(self);
-+ }
-+ 
-+-int tp_init(pyobj_sheet* self, PyObject* /*args*/, PyObject* /*kwargs*/)
-++int tp_init(pyobj_sheet* /*self*/, PyObject* /*args*/, PyObject* /*kwargs*/)
-+ {
-+     return 0;
-+ }
-+ 
-+-PyObject* sheet_get_rows(PyObject* self, PyObject* args, PyObject* kwargs)
-++PyObject* sheet_get_rows(PyObject* self, PyObject* /*args*/, PyObject* /*kwargs*/)
-+ {
-+     PyTypeObject* sr_type = get_sheet_rows_type();
-+ 
-+@@ -210,7 +210,7 @@ PyObject* sheet_write(PyObject* self, PyObject* args, PyObject* kwargs)
-+     return Py_None;
-+ }
-+ 
-+-PyObject* sheet_get_named_expressions(PyObject* self, PyObject* args, PyObject* kwargs)
-++PyObject* sheet_get_named_expressions(PyObject* self, PyObject* /*args*/, PyObject* /*kwargs*/)
-+ {
-+     const ss::document& doc = *t(self)->data->m_doc;
-+     ss::sheet_t si = t(self)->data->m_sheet->get_index();
-+diff --git a/src/python/sheet_rows.cpp b/src/python/sheet_rows.cpp
-+index 7fa869ea..be495894 100644
-+--- a/src/python/sheet_rows.cpp
-++++ b/src/python/sheet_rows.cpp
-+@@ -49,7 +49,7 @@ PyObject* sheet_rows_new(PyTypeObject* type, PyObject* /*args*/, PyObject* /*kwa
-+     return reinterpret_cast<PyObject*>(self);
-+ }
-+ 
-+-int sheet_rows_init(pyobj_sheet_rows* self, PyObject* /*args*/, PyObject* /*kwargs*/)
-++int sheet_rows_init(pyobj_sheet_rows* /*self*/, PyObject* /*args*/, PyObject* /*kwargs*/)
-+ {
-+     return 0;
-+ }
-+diff --git a/src/spreadsheet/factory_sheet.cpp b/src/spreadsheet/factory_sheet.cpp
-+index 3e04295c..61541174 100644
-+--- a/src/spreadsheet/factory_sheet.cpp
-++++ b/src/spreadsheet/factory_sheet.cpp
-+@@ -74,19 +74,19 @@ void import_data_table::reset()
-+ {
-+ }
-+ 
-+-void import_data_table::set_type(data_table_type_t type)
-++void import_data_table::set_type(data_table_type_t /*type*/)
-+ {
-+ }
-+ 
-+-void import_data_table::set_range(const range_t& range)
-++void import_data_table::set_range(const range_t& /*range*/)
-+ {
-+ }
-+ 
-+-void import_data_table::set_first_reference(std::string_view ref, bool deleted)
-++void import_data_table::set_first_reference(std::string_view /*ref*/, bool /*deleted*/)
-+ {
-+ }
-+ 
-+-void import_data_table::set_second_reference(std::string_view ref, bool deleted)
-++void import_data_table::set_second_reference(std::string_view /*ref*/, bool /*deleted*/)
-+ {
-+ }
-+ 
-+@@ -193,7 +193,7 @@ void import_array_formula::set_range(const range_t& range)
-+     }
-+ }
-+ 
-+-void import_array_formula::set_formula(formula_grammar_t grammar, std::string_view formula)
-++void import_array_formula::set_formula(formula_grammar_t /*grammar*/, std::string_view formula)
-+ {
-+     const ixion::formula_name_resolver* resolver =
-+         m_doc.get_formula_name_resolver(spreadsheet::formula_ref_context_t::global);
-+@@ -223,12 +223,12 @@ void import_array_formula::set_result_value(row_t row, col_t col, double value)
-+     m_result_mtx.set(row, col, value);
-+ }
-+ 
-+-void import_array_formula::set_result_string(row_t row, col_t col, std::string_view value)
-++void import_array_formula::set_result_string(row_t /*row*/, col_t /*col*/, std::string_view /*value*/)
-+ {
-+     // TODO : handle this
-+ }
-+ 
-+-void import_array_formula::set_result_empty(row_t row, col_t col)
-++void import_array_formula::set_result_empty(row_t /*row*/, col_t /*col*/)
-+ {
-+     // TODO : handle this
-+ }
-+@@ -282,7 +282,7 @@ void import_formula::set_position(row_t row, col_t col)
-+     m_col = col;
-+ }
-+ 
-+-void import_formula::set_formula(formula_grammar_t grammar, std::string_view formula)
-++void import_formula::set_formula(formula_grammar_t /*grammar*/, std::string_view formula)
-+ {
-+     if (m_row < 0 || m_col < 0)
-+         return;
-+@@ -331,7 +331,7 @@ void import_formula::set_result_string(std::string_view value)
-+ }
-+ 
-+ void import_formula::set_result_empty() {}
-+-void import_formula::set_result_bool(bool value) {}
-++void import_formula::set_result_bool(bool /*value*/) {}
-+ 
-+ void import_formula::commit()
-+ {
-+diff --git a/src/spreadsheet/sheet_impl.cpp b/src/spreadsheet/sheet_impl.cpp
-+index 72e521c5..c2e7ecb6 100644
-+--- a/src/spreadsheet/sheet_impl.cpp
-++++ b/src/spreadsheet/sheet_impl.cpp
-+@@ -12,7 +12,7 @@
-+ 
-+ namespace orcus { namespace spreadsheet {
-+ 
-+-sheet_impl::sheet_impl(document& doc, sheet& sh, sheet_t sheet_index) :
-++sheet_impl::sheet_impl(document& doc, sheet& /*sh*/, sheet_t sheet_index) :
-+     m_doc(doc),
-+     m_col_widths(0, m_doc.get_sheet_size().columns, get_default_column_width()),
-+     m_row_heights(0, m_doc.get_sheet_size().rows, get_default_row_height()),
-+-- 
-+2.25.1
-+
-diff --git a/external/liborcus/std-get-busted.patch.1 b/external/liborcus/std-get-busted.patch.1
-new file mode 100644
-index 000000000000..40b839f65f47
---- /dev/null
-+++ b/external/liborcus/std-get-busted.patch.1
-@@ -0,0 +1,418 @@
-+From f917ed284c52ae12fb0d752c17141f355158470e Mon Sep 17 00:00:00 2001
-+From: Kohei Yoshida <kohei.yoshida@gmail.com>
-+Date: Tue, 2 Nov 2021 22:07:51 -0400
-+Subject: [PATCH] std::get<T>(...) may be flaky with some version of clang.
-+
-+As workaround, use boost::variant and boost::get.
-+
-+c.f. https://stackoverflow.com/questions/52521388/stdvariantget-does-not-compile-with-apple-llvm-10-0
-+---
-+ include/orcus/config.hpp                    |  4 ++--
-+ include/orcus/css_selector.hpp              |  5 +++--
-+ include/orcus/json_parser_thread.hpp        |  4 ++--
-+ include/orcus/sax_token_parser_thread.hpp   |  5 +++--
-+ include/orcus/spreadsheet/pivot.hpp         |  7 ++++---
-+ include/orcus/threaded_json_parser.hpp      |  8 ++++----
-+ include/orcus/threaded_sax_token_parser.hpp |  8 ++++----
-+ src/liborcus/css_document_tree.cpp          |  2 +-
-+ src/liborcus/css_selector.cpp               | 12 ++++++------
-+ src/liborcus/orcus_csv.cpp                  |  4 ++--
-+ src/orcus_csv_main.cpp                      |  2 +-
-+ src/orcus_test_csv.cpp                      |  8 ++++----
-+ src/orcus_test_xlsx.cpp                     |  4 ++--
-+ src/parser/json_parser_thread.cpp           |  8 ++++----
-+ src/python/sheet_rows.cpp                   |  3 +++
-+ 15 files changed, 45 insertions(+), 39 deletions(-)
-+
-+diff --git a/include/orcus/config.hpp b/include/orcus/config.hpp
-+index 17743e6a..fe9a7d81 100644
-+--- a/include/orcus/config.hpp
-++++ b/include/orcus/config.hpp
-+@@ -12,7 +12,7 @@
-+ #include "orcus/types.hpp"
-+ 
-+ #include <string>
-+-#include <variant>
-++#include <boost/variant.hpp>
-+ 
-+ namespace orcus {
-+ 
-+@@ -37,7 +37,7 @@ struct ORCUS_DLLPUBLIC config
-+     };
-+ 
-+     // TODO: add config for other formats as needed.
-+-    using data_type = std::variant<csv_config>;
-++    using data_type = boost::variant<csv_config>;
-+ 
-+     /**
-+      * Enable or disable runtime debug output to stdout or stderr.
-+diff --git a/include/orcus/css_selector.hpp b/include/orcus/css_selector.hpp
-+index 1e41d544..dafeddf5 100644
-+--- a/include/orcus/css_selector.hpp
-++++ b/include/orcus/css_selector.hpp
-+@@ -12,11 +12,12 @@
-+ #include "css_types.hpp"
-+ 
-+ #include <ostream>
-+-#include <variant>
-+ #include <vector>
-+ #include <unordered_set>
-+ #include <unordered_map>
-+ 
-++#include <boost/variant.hpp>
-++
-+ namespace orcus {
-+ 
-+ struct ORCUS_DLLPUBLIC css_simple_selector_t
-+@@ -73,7 +74,7 @@ struct ORCUS_DLLPUBLIC css_selector_t
-+  */
-+ struct ORCUS_DLLPUBLIC css_property_value_t
-+ {
-+-    using value_type = std::variant<std::string_view, css::rgba_color_t, css::hsla_color_t>;
-++    using value_type = boost::variant<std::string_view, css::rgba_color_t, css::hsla_color_t>;
-+ 
-+     css::property_value_t type;
-+     value_type value;
-+diff --git a/include/orcus/json_parser_thread.hpp b/include/orcus/json_parser_thread.hpp
-+index 8328ef11..565008da 100644
-+--- a/include/orcus/json_parser_thread.hpp
-++++ b/include/orcus/json_parser_thread.hpp
-+@@ -14,7 +14,7 @@
-+ #include <memory>
-+ #include <vector>
-+ #include <ostream>
-+-#include <variant>
-++#include <boost/variant.hpp>
-+ 
-+ namespace orcus {
-+ 
-+@@ -47,7 +47,7 @@ enum class parse_token_t
-+ 
-+ struct ORCUS_PSR_DLLPUBLIC parse_token
-+ {
-+-    using value_type = std::variant<std::string_view, parse_error_value_t, double>;
-++    using value_type = boost::variant<std::string_view, parse_error_value_t, double>;
-+ 
-+     parse_token_t type;
-+     value_type value;
-+diff --git a/include/orcus/sax_token_parser_thread.hpp b/include/orcus/sax_token_parser_thread.hpp
-+index b3645735..e0842013 100644
-+--- a/include/orcus/sax_token_parser_thread.hpp
-++++ b/include/orcus/sax_token_parser_thread.hpp
-+@@ -12,10 +12,11 @@
-+ #include "types.hpp"
-+ 
-+ #include <memory>
-+-#include <variant>
-+ #include <vector>
-+ #include <ostream>
-+ 
-++#include <boost/variant.hpp>
-++
-+ namespace orcus {
-+ 
-+ class tokens;
-+@@ -36,7 +37,7 @@ enum class parse_token_t
-+ 
-+ struct ORCUS_PSR_DLLPUBLIC parse_token
-+ {
-+-    using value_type = std::variant<std::string_view, parse_error_value_t, const xml_token_element_t*>;
-++    using value_type = boost::variant<std::string_view, parse_error_value_t, const xml_token_element_t*>;
-+ 
-+     parse_token_t type;
-+     value_type value;
-+diff --git a/include/orcus/spreadsheet/pivot.hpp b/include/orcus/spreadsheet/pivot.hpp
-+index dee25596..fa091160 100644
-+--- a/include/orcus/spreadsheet/pivot.hpp
-++++ b/include/orcus/spreadsheet/pivot.hpp
-+@@ -15,9 +15,10 @@
-+ #include <memory>
-+ #include <vector>
-+ #include <limits>
-+-#include <variant>
-+ #include <optional>
-+ 
-++#include <boost/variant.hpp>
-++
-+ namespace ixion {
-+ 
-+ struct abs_range_t;
-+@@ -36,7 +37,7 @@ using pivot_cache_indices_t = std::vector<size_t>;
-+ 
-+ struct ORCUS_SPM_DLLPUBLIC pivot_cache_record_value_t
-+ {
-+-    using value_type = std::variant<bool, double, std::size_t, std::string_view, date_time_t>;
-++    using value_type = boost::variant<bool, double, std::size_t, std::string_view, date_time_t>;
-+ 
-+     enum class record_type
-+     {
-+@@ -66,7 +67,7 @@ using pivot_cache_record_t = std::vector<pivot_cache_record_value_t>;
-+ 
-+ struct ORCUS_SPM_DLLPUBLIC pivot_cache_item_t
-+ {
-+-    using value_type = std::variant<bool, double, std::string_view, date_time_t, error_value_t>;
-++    using value_type = boost::variant<bool, double, std::string_view, date_time_t, error_value_t>;
-+ 
-+     enum class item_type
-+     {
-+diff --git a/include/orcus/threaded_json_parser.hpp b/include/orcus/threaded_json_parser.hpp
-+index 51cdaced..3bf6e591 100644
-+--- a/include/orcus/threaded_json_parser.hpp
-++++ b/include/orcus/threaded_json_parser.hpp
-+@@ -151,23 +151,23 @@ void threaded_json_parser<_Handler>::process_tokens(json::parse_tokens_t& tokens
-+                     m_handler.null();
-+                     break;
-+                 case json::parse_token_t::number:
-+-                    m_handler.number(std::get<double>(t.value));
-++                    m_handler.number(boost::get<double>(t.value));
-+                     break;
-+                 case json::parse_token_t::object_key:
-+                 {
-+-                    auto s = std::get<std::string_view>(t.value);
-++                    auto s = boost::get<std::string_view>(t.value);
-+                     m_handler.object_key(s.data(), s.size(), false);
-+                     break;
-+                 }
-+                 case json::parse_token_t::string:
-+                 {
-+-                    auto s = std::get<std::string_view>(t.value);
-++                    auto s = boost::get<std::string_view>(t.value);
-+                     m_handler.string(s.data(), s.size(), false);
-+                     break;
-+                 }
-+                 case json::parse_token_t::parse_error:
-+                 {
-+-                    auto v = std::get<parse_error_value_t>(t.value);
-++                    auto v = boost::get<parse_error_value_t>(t.value);
-+                     throw json::parse_error(std::string{v.str}, v.offset);
-+                 }
-+                 case json::parse_token_t::unknown:
-+diff --git a/include/orcus/threaded_sax_token_parser.hpp b/include/orcus/threaded_sax_token_parser.hpp
-+index 59ea967a..1b389be2 100644
-+--- a/include/orcus/threaded_sax_token_parser.hpp
-++++ b/include/orcus/threaded_sax_token_parser.hpp
-+@@ -131,25 +131,25 @@ void threaded_sax_token_parser<_Handler>::process_tokens(const sax::parse_tokens
-+         {
-+             case sax::parse_token_t::start_element:
-+             {
-+-                const auto* elem = std::get<const xml_token_element_t*>(t.value);
-++                const auto* elem = boost::get<const xml_token_element_t*>(t.value);
-+                 m_handler.start_element(*elem);
-+                 break;
-+             }
-+             case sax::parse_token_t::end_element:
-+             {
-+-                const auto* elem = std::get<const xml_token_element_t*>(t.value);
-++                const auto* elem = boost::get<const xml_token_element_t*>(t.value);
-+                 m_handler.end_element(*elem);
-+                 break;
-+             }
-+             case sax::parse_token_t::characters:
-+             {
-+-                auto s = std::get<std::string_view>(t.value);
-++                auto s = boost::get<std::string_view>(t.value);
-+                 m_handler.characters(s, false);
-+                 break;
-+             }
-+             case sax::parse_token_t::parse_error:
-+             {
-+-                auto v = std::get<parse_error_value_t>(t.value);
-++                auto v = boost::get<parse_error_value_t>(t.value);
-+                 throw sax::malformed_xml_error(std::string{v.str}, v.offset);
-+             }
-+             default:
-+diff --git a/src/liborcus/css_document_tree.cpp b/src/liborcus/css_document_tree.cpp
-+index 46bf7e91..4b44edff 100644
-+--- a/src/liborcus/css_document_tree.cpp
-++++ b/src/liborcus/css_document_tree.cpp
-+@@ -317,7 +317,7 @@ public:
-+             {
-+                 // String value needs interning.
-+                 css_property_value_t interned = v;
-+-                auto s = std::get<std::string_view>(v.value);
-++                auto s = boost::get<std::string_view>(v.value);
-+                 interned.value = m_sp.intern(s).first;
-+                 m_dest.push_back(interned);
-+                 break;
-+diff --git a/src/liborcus/css_selector.cpp b/src/liborcus/css_selector.cpp
-+index b7b63f37..de522062 100644
-+--- a/src/liborcus/css_selector.cpp
-++++ b/src/liborcus/css_selector.cpp
-+@@ -155,7 +155,7 @@ std::ostream& operator<< (std::ostream& os, const css_property_value_t& v)
-+     {
-+         case css::property_value_t::hsl:
-+         {
-+-            auto c = std::get<css::hsla_color_t>(v.value);
-++            auto c = boost::get<css::hsla_color_t>(v.value);
-+             os << "hsl("
-+                 << (int)c.hue << sep
-+                 << (int)c.saturation << sep
-+@@ -165,7 +165,7 @@ std::ostream& operator<< (std::ostream& os, const css_property_value_t& v)
-+         }
-+         case css::property_value_t::hsla:
-+         {
-+-            auto c = std::get<css::hsla_color_t>(v.value);
-++            auto c = boost::get<css::hsla_color_t>(v.value);
-+             os << "hsla("
-+                 << (int)c.hue << sep
-+                 << (int)c.saturation << sep
-+@@ -176,7 +176,7 @@ std::ostream& operator<< (std::ostream& os, const css_property_value_t& v)
-+         }
-+         case css::property_value_t::rgb:
-+         {
-+-            auto c = std::get<css::rgba_color_t>(v.value);
-++            auto c = boost::get<css::rgba_color_t>(v.value);
-+             os << "rgb("
-+                 << (int)c.red << sep
-+                 << (int)c.green << sep
-+@@ -186,7 +186,7 @@ std::ostream& operator<< (std::ostream& os, const css_property_value_t& v)
-+         }
-+         case css::property_value_t::rgba:
-+         {
-+-            auto c = std::get<css::rgba_color_t>(v.value);
-++            auto c = boost::get<css::rgba_color_t>(v.value);
-+             os << "rgba("
-+                 << (int)c.red << sep
-+                 << (int)c.green << sep
-+@@ -196,10 +196,10 @@ std::ostream& operator<< (std::ostream& os, const css_property_value_t& v)
-+             break;
-+         }
-+         case css::property_value_t::string:
-+-            os << std::get<std::string_view>(v.value);
-++            os << boost::get<std::string_view>(v.value);
-+             break;
-+         case css::property_value_t::url:
-+-            os << "url(" << std::get<std::string_view>(v.value) << ")";
-++            os << "url(" << boost::get<std::string_view>(v.value) << ")";
-+             break;
-+         case css::property_value_t::none:
-+         default:
-+diff --git a/src/liborcus/orcus_csv.cpp b/src/liborcus/orcus_csv.cpp
-+index 5c71bcf5..637308ab 100644
-+--- a/src/liborcus/orcus_csv.cpp
-++++ b/src/liborcus/orcus_csv.cpp
-+@@ -63,7 +63,7 @@ public:
-+         // 0.
-+         if (m_row >= mp_sheet->get_sheet_size().rows)
-+         {
-+-            auto csv = std::get<config::csv_config>(m_app_config.data);
-++            auto csv = boost::get<config::csv_config>(m_app_config.data);
-+ 
-+             if (!csv.split_to_multiple_sheets)
-+                 throw max_row_size_reached();
-+@@ -93,7 +93,7 @@ public:
-+ 
-+     void cell(const char* p, size_t n, bool transient)
-+     {
-+-        auto csv = std::get<config::csv_config>(m_app_config.data);
-++        auto csv = boost::get<config::csv_config>(m_app_config.data);
-+ 
-+         if (m_sheet == 0 && size_t(m_row) < csv.header_row_size)
-+         {
-+diff --git a/src/orcus_csv_main.cpp b/src/orcus_csv_main.cpp
-+index 4f6d7173..446f2684 100644
-+--- a/src/orcus_csv_main.cpp
-++++ b/src/orcus_csv_main.cpp
-+@@ -45,7 +45,7 @@ public:
-+ 
-+     virtual void map_to_config(config& opt, const po::variables_map& vm) override
-+     {
-+-        auto csv = std::get<config::csv_config>(opt.data);
-++        auto csv = boost::get<config::csv_config>(opt.data);
-+ 
-+         if (vm.count("row-header"))
-+             csv.header_row_size = vm["row-header"].as<size_t>();
-+diff --git a/src/orcus_test_csv.cpp b/src/orcus_test_csv.cpp
-+index 310ace9d..0b9ba994 100644
-+--- a/src/orcus_test_csv.cpp
-++++ b/src/orcus_test_csv.cpp
-+@@ -95,8 +95,8 @@ void test_csv_import_split_sheet()
-+     std::cout << "checking " << path << "..." << std::endl;
-+ 
-+     config conf(format_t::csv);
-+-    std::get<config::csv_config>(conf.data).header_row_size = 0;
-+-    std::get<config::csv_config>(conf.data).split_to_multiple_sheets = true;
-++    boost::get<config::csv_config>(conf.data).header_row_size = 0;
-++    boost::get<config::csv_config>(conf.data).split_to_multiple_sheets = true;
-+ 
-+     // Set the row size to 11 to make sure the split occurs.
-+     spreadsheet::range_size_t ss{11, 4};
-+@@ -126,7 +126,7 @@ void test_csv_import_split_sheet()
-+     path = dir;
-+     path.append("input.csv");
-+     doc.clear();
-+-    std::get<config::csv_config>(conf.data).header_row_size = 1;
-++    boost::get<config::csv_config>(conf.data).header_row_size = 1;
-+     {
-+         spreadsheet::import_factory factory(doc);
-+         orcus_csv app(&factory);
-+@@ -149,7 +149,7 @@ void test_csv_import_split_sheet()
-+ 
-+     // Re-import it again, but this time disable the splitting.  The data should
-+     // get trucated on the first sheet.
-+-    std::get<config::csv_config>(conf.data).split_to_multiple_sheets = false;
-++    boost::get<config::csv_config>(conf.data).split_to_multiple_sheets = false;
-+ 
-+     path = dir;
-+     path.append("input.csv");
-+diff --git a/src/orcus_test_xlsx.cpp b/src/orcus_test_xlsx.cpp
-+index 807c61e4..632fb1e7 100644
-+--- a/src/orcus_test_xlsx.cpp
-++++ b/src/orcus_test_xlsx.cpp
-+@@ -1154,8 +1154,8 @@ void test_xlsx_pivot_group_by_numbers()
-+     for (const pivot_cache_item_t& item : fld->items)
-+     {
-+         assert(item.type == pivot_cache_item_t::item_type::numeric);
-+-        assert(*fld->min_value <= std::get<double>(item.value));
-+-        assert(std::get<double>(item.value) <= *fld->max_value);
-++        assert(*fld->min_value <= boost::get<double>(item.value));
-++        assert(boost::get<double>(item.value) <= *fld->max_value);
-+     }
-+ 
-+     // This field is also gruop field with 7 numeric intervals of width 2.
-+diff --git a/src/parser/json_parser_thread.cpp b/src/parser/json_parser_thread.cpp
-+index 36bbe6e6..65fb6255 100644
-+--- a/src/parser/json_parser_thread.cpp
-++++ b/src/parser/json_parser_thread.cpp
-+@@ -237,19 +237,19 @@ std::ostream& operator<< (std::ostream& os, const parse_tokens_t& tokens)
-+                     os << "- null" << endl;
-+                     break;
-+                 case parse_token_t::number:
-+-                    os << "- number (v=" << std::get<double>(t.value) << ")" << endl;
-++                    os << "- number (v=" << boost::get<double>(t.value) << ")" << endl;
-+                     break;
-+                 case parse_token_t::object_key:
-+-                    os << "- object_key (v=" << std::get<std::string_view>(t.value) << ")" << endl;
-++                    os << "- object_key (v=" << boost::get<std::string_view>(t.value) << ")" << endl;
-+                     break;
-+                 case parse_token_t::parse_error:
-+                 {
-+-                    auto v = std::get<parse_error_value_t>(t.value);
-++                    auto v = boost::get<parse_error_value_t>(t.value);
-+                     os << "- parse_error (v=" << v.str << ", offset=" << v.offset << ")" << endl;
-+                     break;
-+                 }
-+                 case parse_token_t::string:
-+-                    os << "- string (" << std::get<std::string_view>(t.value) << ")" << endl;
-++                    os << "- string (" << boost::get<std::string_view>(t.value) << ")" << endl;
-+                     break;
-+                 case parse_token_t::unknown:
-+                     os << "- unknown" << endl;
-+diff --git a/src/python/sheet_rows.cpp b/src/python/sheet_rows.cpp
-+index be495894..0d21ba71 100644
-+--- a/src/python/sheet_rows.cpp
-++++ b/src/python/sheet_rows.cpp
-+@@ -135,7 +135,10 @@ PyObject* sheet_rows_iternext(PyObject* self)
-+                 break;
-+             }
-+             case ixion::celltype_t::unknown:
-++            {
-++                PyErr_SetString(PyExc_RuntimeError, "Unknown cell type.");
-+                 break;
-++            }
-+         }
-+ 
-+         if (!obj)
-+-- 
-+2.25.1
-+
-diff --git a/external/liborcus/unused-variables.patch.1 b/external/liborcus/unused-variables.patch.1
-new file mode 100644
-index 000000000000..77b88fae288c
---- /dev/null
-+++ b/external/liborcus/unused-variables.patch.1
-@@ -0,0 +1,24 @@
-+From 5fccafa297ce2439ee850e13ccbeea3edb1750af Mon Sep 17 00:00:00 2001
-+From: Kohei Yoshida <kohei.yoshida@gmail.com>
-+Date: Tue, 2 Nov 2021 20:42:45 -0400
-+Subject: [PATCH] Unused variables.
-+
-+---
-+ include/orcus/sax_parser.hpp | 1 -
-+ 1 file changed, 1 deletion(-)
-+
-+diff --git a/include/orcus/sax_parser.hpp b/include/orcus/sax_parser.hpp
-+index 24b1e8ea..15e8d917 100644
-+--- a/include/orcus/sax_parser.hpp
-++++ b/include/orcus/sax_parser.hpp
-+@@ -539,7 +539,6 @@ template<typename _Handler, typename _Config>
-+ void sax_parser<_Handler,_Config>::attribute()
-+ {
-+     sax::parser_attribute attr;
-+-    std::string_view attr_ns_name, attr_name, attr_value;
-+     attribute_name(attr.ns, attr.name);
-+ 
-+ #if ORCUS_DEBUG_SAX_PARSER
-+-- 
-+2.25.1
-+
-diff --git a/external/mdds/UnpackedTarball_mdds.mk b/external/mdds/UnpackedTarball_mdds.mk
-index 3c664336430b..cf5bd48a1eb6 100644
---- a/external/mdds/UnpackedTarball_mdds.mk
-+++ b/external/mdds/UnpackedTarball_mdds.mk
-@@ -13,11 +13,9 @@ $(eval $(call gb_UnpackedTarball_set_tarball,mdds,$(MDDS_TARBALL)))
- 
- $(eval $(call gb_UnpackedTarball_set_patchlevel,mdds,0))
- 
--# * external/mdds/Wunused-but-set-variable.patch upstream at
--#   <https://gitlab.com/mdds/mdds/-/merge_requests/29> "-Werror,-Wunused-but-set-variable (Clang 13
--#   trunk)":
- $(eval $(call gb_UnpackedTarball_add_patches,mdds,\
--    external/mdds/Wunused-but-set-variable.patch \
-+	external/mdds/remove-unused-parameters.patch.1 \
-+	external/mdds/remove-more-unused-parameters.patch.1 \
- ))
- 
- # vim: set noet sw=4 ts=4:
-diff --git a/external/mdds/Wunused-but-set-variable.patch b/external/mdds/Wunused-but-set-variable.patch
-deleted file mode 100644
-index ba28cb18eded..000000000000
---- a/external/mdds/Wunused-but-set-variable.patch
-+++ /dev/null
-@@ -1,46 +0,0 @@
----- include/mdds/multi_type_vector_def.inl
--+++ include/mdds/multi_type_vector_def.inl
--@@ -843,18 +843,12 @@
-- typename multi_type_vector<_CellBlockFunc, _EventFunc>::iterator
-- multi_type_vector<_CellBlockFunc, _EventFunc>::push_back_empty()
-- {
---    size_type last_block_size = 0;
---    if (!m_blocks.empty())
---        last_block_size = m_blocks.back().m_size;
---
--     size_type block_index = m_blocks.size();
---    size_type start_pos = m_cur_size;
-- 
--     if (!append_empty(1))
--     {
--         // Last empty block has been extended.
--         --block_index;
---        start_pos -= last_block_size;
--     }
-- 
--     // Get the iterator of the last block.
--@@ -3923,8 +3917,6 @@
--     size_type offset = start_row - start_row_in_block1;
--     size_type end_row_in_block2 = start_row_in_block2 + blk2->m_size - 1;
-- 
---    size_type start_row_itr = start_row_in_block1;
---
--     // Initially set to erase blocks between block 1 and block 2 non-inclusive at either end.
--     typename blocks_type::iterator it_erase_begin = m_blocks.begin() + block_index1 + 1;
--     typename blocks_type::iterator it_erase_end = m_blocks.begin() + block_index2;
--@@ -3948,7 +3940,6 @@
--                 data_blk.mp_data = blk0->mp_data;
--                 blk0->mp_data = nullptr;
-- 
---                start_row_itr -= blk0->m_size;
--                 data_blk.m_size += blk0->m_size;
--                 data_blk.m_position = blk0->m_position;
-- 
--@@ -3967,7 +3958,6 @@
--             element_block_func::resize_block(*blk1->mp_data, offset);
--         }
--         blk1->m_size = offset;
---        start_row_itr += offset;
--     }
-- 
--     if (blk0_copied)
-diff --git a/external/mdds/remove-more-unused-parameters.patch.1 b/external/mdds/remove-more-unused-parameters.patch.1
-new file mode 100644
-index 000000000000..c0c29471c9ed
---- /dev/null
-+++ b/external/mdds/remove-more-unused-parameters.patch.1
-@@ -0,0 +1,42 @@
-+From cc24c84d35274aead5afe574c87ecd6368aa5e2a Mon Sep 17 00:00:00 2001
-+From: Kohei Yoshida <kohei.yoshida@gmail.com>
-+Date: Tue, 2 Nov 2021 18:24:30 -0400
-+Subject: [PATCH] More unused parameters.
-+
-+I personally cannot reproduce the warnings. But The android x86 build
-+of LibreOffice generates the following build warnings:
-+
-+In file included from /home/tdf/lode/jenkins/workspace/android_x86/svl/source/misc/gridprinter.cxx:16:
-+In file included from /home/tdf/lode/jenkins/workspace/android_x86/workdir/UnpackedTarball/mdds/include/mdds/multi_type_matrix.hpp:37:
-+In file included from /home/tdf/lode/jenkins/workspace/android_x86/workdir/UnpackedTarball/mdds/include/mdds/multi_type_vector.hpp:31:
-+In file included from /home/tdf/lode/jenkins/workspace/android_x86/workdir/UnpackedTarball/mdds/include/mdds/./multi_type_vector/soa/main.hpp:35:
-+/home/tdf/lode/jenkins/workspace/android_x86/workdir/UnpackedTarball/mdds/include/mdds/./multi_type_vector/soa/./block_util.hpp:49:27: error: unused parameter 'block_store' [-Werror,-Wunused-parameter]
-+    void operator()(Blks& block_store, int64_t start_block_index, int64_t delta) const
-+                          ^
-+/home/tdf/lode/jenkins/workspace/android_x86/workdir/UnpackedTarball/mdds/include/mdds/./multi_type_vector/soa/./block_util.hpp:49:48: error: unused parameter 'start_block_index' [-Werror,-Wunused-parameter]
-+    void operator()(Blks& block_store, int64_t start_block_index, int64_t delta) const
-+                                               ^
-+/home/tdf/lode/jenkins/workspace/android_x86/workdir/UnpackedTarball/mdds/include/mdds/./multi_type_vector/soa/./block_util.hpp:49:75: error: unused parameter 'delta' [-Werror,-Wunused-parameter]
-+    void operator()(Blks& block_store, int64_t start_block_index, int64_t delta) const
-+                                                                          ^
-+3 errors generated.
-+---
-+ include/mdds/multi_type_vector/soa/block_util.hpp | 2 +-
-+ 1 file changed, 1 insertion(+), 1 deletion(-)
-+
-+diff --git a/include/mdds/multi_type_vector/soa/block_util.hpp b/include/mdds/multi_type_vector/soa/block_util.hpp
-+index d10ee67..73ba27c 100644
-+--- a/include/mdds/multi_type_vector/soa/block_util.hpp
-++++ b/include/mdds/multi_type_vector/soa/block_util.hpp
-+@@ -46,7 +46,7 @@ namespace detail {
-+ template<typename Blks, lu_factor_t F>
-+ struct adjust_block_positions
-+ {
-+-    void operator()(Blks& block_store, int64_t start_block_index, int64_t delta) const
-++    void operator()(Blks& /*block_store*/, int64_t /*start_block_index*/, int64_t /*delta*/) const
-+     {
-+         static_assert(invalid_static_int<F>, "The loop-unrolling factor must be one of 0, 4, 8, 16, or 32.");
-+     }
-+-- 
-+2.25.1
-+
-diff --git a/external/mdds/remove-unused-parameters.patch.1 b/external/mdds/remove-unused-parameters.patch.1
-new file mode 100644
-index 000000000000..ebfc94fbf107
---- /dev/null
-+++ b/external/mdds/remove-unused-parameters.patch.1
-@@ -0,0 +1,93 @@
-+From 695e4c73fb55b1002237b0a22f13162c5c91aa68 Mon Sep 17 00:00:00 2001
-+From: Kohei Yoshida <kohei.yoshida@gmail.com>
-+Date: Mon, 1 Nov 2021 14:54:36 -0400
-+Subject: [PATCH] Remove unused parameter warnings in public headers.
-+
-+---
-+ include/mdds/multi_type_vector/util.hpp | 10 ++++++++--
-+ include/mdds/trie_map_def.inl           | 12 ++++++------
-+ 2 files changed, 14 insertions(+), 8 deletions(-)
-+
-+diff --git a/include/mdds/multi_type_vector/util.hpp b/include/mdds/multi_type_vector/util.hpp
-+index d21e302..a1cb1f9 100644
-+--- a/include/mdds/multi_type_vector/util.hpp
-++++ b/include/mdds/multi_type_vector/util.hpp
-+@@ -51,7 +51,10 @@ struct empty_event_func
-+      *
-+      * @param block pointer to the acquired element block instance.
-+      */
-+-    void element_block_acquired(const base_element_block* block) {}
-++    void element_block_acquired(const base_element_block* block)
-++    {
-++        (void)block;
-++    }
-+ 
-+     /**
-+      * Callback function for element block release events.  This gets called
-+@@ -61,7 +64,10 @@ struct empty_event_func
-+      *
-+      * @param block pointer to the element block instance being released.
-+      */
-+-    void element_block_released(const base_element_block* block) {}
-++    void element_block_released(const base_element_block* block)
-++    {
-++        (void)block;
-++    }
-+ };
-+ 
-+ /**
-+diff --git a/include/mdds/trie_map_def.inl b/include/mdds/trie_map_def.inl
-+index 49e6de0..be18aec 100644
-+--- a/include/mdds/trie_map_def.inl
-++++ b/include/mdds/trie_map_def.inl
-+@@ -1004,7 +1004,7 @@ packed_trie_map<_KeyTrait,_ValueT>::packed_trie_map(const packed_trie_map& other
-+     {
-+         packed_trie_map& m_parent;
-+ 
-+-        void node(const uintptr_t* node_pos, key_unit_type c, size_t depth, size_t index_size)
-++        void node(const uintptr_t* node_pos, key_unit_type /*c*/, size_t /*depth*/, size_t /*index_size*/)
-+         {
-+             uintptr_t value_ptr = *node_pos;
-+ 
-+@@ -1315,13 +1315,13 @@ void packed_trie_map<_KeyTrait,_ValueT>::save_state(std::ostream& os) const
-+         }
-+ 
-+         /** first element in the buffer. */
-+-        void root_offset(size_t i, const uintptr_t& v) const
-++        void root_offset(size_t /*i*/, const uintptr_t& v) const
-+         {
-+             write(v);
-+         }
-+ 
-+         /** first element in each node section. */
-+-        void node_value(size_t i, const uintptr_t& v) const
-++        void node_value(size_t /*i*/, const uintptr_t& v) const
-+         {
-+             const value_type* p = reinterpret_cast<const value_type*>(v);
-+             if (p)
-+@@ -1348,19 +1348,19 @@ void packed_trie_map<_KeyTrait,_ValueT>::save_state(std::ostream& os) const
-+          * second element in each node section that stores the size of
-+          * the child data sub-section.
-+          */
-+-        void node_index_size(size_t i, const uintptr_t& v) const
-++        void node_index_size(size_t /*i*/, const uintptr_t& v) const
-+         {
-+             write(v);
-+         }
-+ 
-+         /** element that stores the key value for child node. */
-+-        void node_child_key(size_t i, const uintptr_t& v) const
-++        void node_child_key(size_t /*i*/, const uintptr_t& v) const
-+         {
-+             write(v);
-+         }
-+ 
-+         /** element that stores the relative offset of the child node. */
-+-        void node_child_offset(size_t i, const uintptr_t& v) const
-++        void node_child_offset(size_t /*i*/, const uintptr_t& v) const
-+         {
-+             write(v);
-+         }
-+-- 
-+2.25.1
-+
-diff --git a/sc/inc/mtvelements.hxx b/sc/inc/mtvelements.hxx
-index a6c4d5ffa7c7..636706e0c234 100644
---- a/sc/inc/mtvelements.hxx
-+++ b/sc/inc/mtvelements.hxx
-@@ -24,10 +24,10 @@
- #define MDDS_MULTI_TYPE_VECTOR_DEBUG 1
- #endif
- 
--#include <mdds/multi_type_vector_macro.hpp>
--#include <mdds/multi_type_vector.hpp>
--#include <mdds/multi_type_vector_custom_func1.hpp>
--#include <mdds/multi_type_vector_custom_func3.hpp>
-+#include <mdds/multi_type_vector/macro.hpp>
-+#include <mdds/multi_type_vector/soa/main.hpp>
-+#include <mdds/multi_type_vector/custom_func1.hpp>
-+#include <mdds/multi_type_vector/custom_func3.hpp>
- 
- #include <unordered_map>
- #include <memory>
-@@ -97,21 +97,27 @@ public:
-     void element_block_released(const mdds::mtv::base_element_block* block);
- };
- 
-+struct CellStoreTrait
-+{
-+    using event_func = CellStoreEvent;
-+    static constexpr mdds::mtv::lu_factor_t loop_unrolling = mdds::mtv::lu_factor_t::lu16;
-+};
-+
- /// Cell note container
- typedef mdds::mtv::custom_block_func1<sc::cellnote_block> CNoteFunc;
--typedef mdds::multi_type_vector<CNoteFunc> CellNoteStoreType;
-+typedef mdds::mtv::soa::multi_type_vector<CNoteFunc> CellNoteStoreType;
- 
- /// Broadcaster storage container
- typedef mdds::mtv::custom_block_func1<sc::broadcaster_block> BCBlkFunc;
--typedef mdds::multi_type_vector<BCBlkFunc> BroadcasterStoreType;
-+typedef mdds::mtv::soa::multi_type_vector<BCBlkFunc> BroadcasterStoreType;
- 
- /// Cell text attribute container.
- typedef mdds::mtv::custom_block_func1<sc::celltextattr_block> CTAttrFunc;
--typedef mdds::multi_type_vector<CTAttrFunc> CellTextAttrStoreType;
-+typedef mdds::mtv::soa::multi_type_vector<CTAttrFunc> CellTextAttrStoreType;
- 
- /// Cell container
- typedef mdds::mtv::custom_block_func3<sc::string_block, sc::edittext_block, sc::formula_block> CellFunc;
--typedef mdds::multi_type_vector<CellFunc, CellStoreEvent> CellStoreType;
-+typedef mdds::mtv::soa::multi_type_vector<CellFunc, CellStoreTrait> CellStoreType;
- 
- /**
-  * Store position data for column array storage.
-diff --git a/sc/source/filter/inc/orcusinterface.hxx b/sc/source/filter/inc/orcusinterface.hxx
-index 060456733fbc..935854c46e3f 100644
---- a/sc/source/filter/inc/orcusinterface.hxx
-+++ b/sc/source/filter/inc/orcusinterface.hxx
-@@ -75,8 +75,8 @@ class ScOrcusRefResolver : public orcus::spreadsheet::iface::import_reference_re
- public:
-     ScOrcusRefResolver( const ScOrcusGlobalSettings& rGS );
- 
--    orcus::spreadsheet::src_address_t resolve_address(const char* p, size_t n) override;
--    orcus::spreadsheet::src_range_t resolve_range(const char* p, size_t n) override;
-+    orcus::spreadsheet::src_address_t resolve_address(std::string_view address) override;
-+    orcus::spreadsheet::src_range_t resolve_range(std::string_view range) override;
- };
- 
- class ScOrcusNamedExpression : public orcus::spreadsheet::iface::import_named_expression
-@@ -94,8 +94,8 @@ public:
-     void reset();
- 
-     virtual void set_base_position(const orcus::spreadsheet::src_address_t& pos) override;
--    virtual void set_named_expression(const char* p_name, size_t n_name, const char* p_exp, size_t n_exp) override;
--    virtual void set_named_range(const char* p_name, size_t n_name, const char* p_range, size_t n_range) override;
-+    virtual void set_named_expression(std::string_view name, std::string_view expression) override;
-+    virtual void set_named_range(std::string_view name, std::string_view range) override;
-     virtual void commit() override;
- };
- 
-@@ -107,19 +107,19 @@ class ScOrcusSharedStrings : public orcus::spreadsheet::iface::import_shared_str
- public:
-     ScOrcusSharedStrings(ScOrcusFactory& rFactory);
- 
--    virtual size_t append(const char* s, size_t n) override;
--    virtual size_t add(const char* s, size_t n) override;
-+    virtual size_t append(std::string_view s) override;
-+    virtual size_t add(std::string_view s) override;
- 
-     virtual void set_segment_bold(bool b) override;
-     virtual void set_segment_italic(bool b) override;
-     virtual void set_segment_font(size_t font_index) override;
--    virtual void set_segment_font_name(const char* s, size_t n) override;
-+    virtual void set_segment_font_name(std::string_view s) override;
-     virtual void set_segment_font_size(double point) override;
-     virtual void set_segment_font_color(orcus::spreadsheet::color_elem_t alpha,
-             orcus::spreadsheet::color_elem_t red,
-             orcus::spreadsheet::color_elem_t green,
-             orcus::spreadsheet::color_elem_t blue) override;
--    virtual void append_segment(const char* s, size_t n) override;
-+    virtual void append_segment(std::string_view s) override;
- 
-     virtual size_t commit_segments() override;
- };
-@@ -133,7 +133,7 @@ public:
-     virtual void set_color(orcus::spreadsheet::color_elem_t alpha, orcus::spreadsheet::color_elem_t red,
-             orcus::spreadsheet::color_elem_t green, orcus::spreadsheet::color_elem_t blue) override;
- 
--    virtual void set_formula(const char* p, size_t n) override;
-+    virtual void set_formula(std::string_view formula) override;
- 
-     virtual void set_condition_type(orcus::spreadsheet::condition_type_t type) override;
- 
-@@ -141,7 +141,7 @@ public:
- 
-     virtual void commit_condition() override;
- 
--    virtual void set_icon_name(const char* p, size_t n) override;
-+    virtual void set_icon_name(std::string_view name) override;
- 
-     virtual void set_databar_gradient(bool gradient) override;
- 
-@@ -169,7 +169,7 @@ public:
- 
-     virtual void commit_entry() override;
- 
--    virtual void set_range(const char* p, size_t n) override;
-+    virtual void set_range(std::string_view range) override;
- 
-     virtual void set_range(orcus::spreadsheet::row_t row_start, orcus::spreadsheet::col_t col_start,
-             orcus::spreadsheet::row_t row_end, orcus::spreadsheet::col_t col_end) override;
-@@ -197,7 +197,7 @@ public:
- 
-     virtual void set_column(orcus::spreadsheet::col_t col) override;
- 
--    virtual void append_column_match_value(const char* p, size_t n) override;
-+    virtual void append_column_match_value(std::string_view value) override;
- 
-     virtual void commit_column() override;
- 
-@@ -243,7 +243,7 @@ class ScOrcusFormula : public orcus::spreadsheet::iface::import_formula
-     bool mbShared;
- 
-     ResultType meResType;
--    size_t mnResult; // result string index.
-+    OUString maResult; // result string.
-     double mfResult;
- 
-     void reset();
-@@ -253,10 +253,10 @@ public:
-     virtual ~ScOrcusFormula() override;
- 
-     virtual void set_position(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col) override;
--    virtual void set_formula(orcus::spreadsheet::formula_grammar_t grammar, const char* p, size_t n) override;
-+    virtual void set_formula(orcus::spreadsheet::formula_grammar_t grammar, std::string_view formula) override;
-     virtual void set_shared_formula_index(size_t index) override;
-     virtual void set_result_value(double value) override;
--    virtual void set_result_string(size_t sindex) override;
-+    virtual void set_result_string(std::string_view value) override;
-     virtual void set_result_empty() override;
-     virtual void set_result_bool(bool value) override;
-     virtual void commit() override;
-@@ -282,9 +282,9 @@ public:
-     virtual ~ScOrcusArrayFormula() override;
- 
-     virtual void set_range(const orcus::spreadsheet::range_t& range) override;
--    virtual void set_formula(orcus::spreadsheet::formula_grammar_t grammar, const char* p, size_t n) override;
-+    virtual void set_formula(orcus::spreadsheet::formula_grammar_t grammar, std::string_view formula) override;
-     virtual void set_result_value(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, double value) override;
--    virtual void set_result_string(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, size_t sindex) override;
-+    virtual void set_result_string(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, std::string_view value) override;
-     virtual void set_result_empty(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col) override;
-     virtual void set_result_bool(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, bool value) override;
-     virtual void commit() override;
-@@ -326,8 +326,8 @@ public:
-     virtual orcus::spreadsheet::iface::import_array_formula* get_array_formula() override;
- 
-     // Orcus import interface
--    virtual void set_auto(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, const char* p, size_t n) override;
--    virtual void set_string(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, size_t sindex) override;
-+    virtual void set_auto(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, std::string_view value) override;
-+    virtual void set_string(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, orcus::spreadsheet::string_id_t sindex) override;
-     virtual void set_value(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, double value) override;
-     virtual void set_bool(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, bool value) override;
-     virtual void set_date_time(
-@@ -491,7 +491,7 @@ public:
-     virtual void set_font_count(size_t n) override;
-     virtual void set_font_bold(bool b) override;
-     virtual void set_font_italic(bool b) override;
--    virtual void set_font_name(const char* s, size_t n) override;
-+    virtual void set_font_name(std::string_view name) override;
-     virtual void set_font_size(double point) override;
-     virtual void set_font_underline(orcus::spreadsheet::underline_t e) override;
-     virtual void set_font_underline_width(orcus::spreadsheet::underline_width_t e) override;
-@@ -542,7 +542,7 @@ public:
-     // number format
-     virtual void set_number_format_count(size_t n) override;
-     virtual void set_number_format_identifier(size_t n) override;
--    virtual void set_number_format_code(const char* s, size_t n) override;
-+    virtual void set_number_format_code(std::string_view s) override;
-     virtual size_t commit_number_format() override;
- 
-     // cell style xf
-@@ -574,10 +574,10 @@ public:
-     // cell style entry
- 
-     virtual void set_cell_style_count(size_t n) override;
--    virtual void set_cell_style_name(const char* s, size_t n) override;
-+    virtual void set_cell_style_name(std::string_view name) override;
-     virtual void set_cell_style_xf(size_t index) override;
-     virtual void set_cell_style_builtin(size_t index) override;
--    virtual void set_cell_style_parent_name(const char* s, size_t n) override;
-+    virtual void set_cell_style_parent_name(std::string_view name) override;
-     virtual size_t commit_cell_style() override;
- };
- 
-@@ -639,8 +639,8 @@ public:
-     ScOrcusFactory(ScDocument& rDoc, bool bSkipDefaultStyles=false);
- 
-     virtual orcus::spreadsheet::iface::import_sheet* append_sheet(
--        orcus::spreadsheet::sheet_t sheet_index, const char *sheet_name, size_t sheet_name_length) override;
--    virtual orcus::spreadsheet::iface::import_sheet* get_sheet(const char *sheet_name, size_t sheet_name_length) override;
-+        orcus::spreadsheet::sheet_t sheet_index, std::string_view sheet_name) override;
-+    virtual orcus::spreadsheet::iface::import_sheet* get_sheet(std::string_view sheet_name) override;
-     virtual orcus::spreadsheet::iface::import_sheet* get_sheet(orcus::spreadsheet::sheet_t sheet_index) override;
-     virtual orcus::spreadsheet::iface::import_global_settings* get_global_settings() override;
-     virtual orcus::spreadsheet::iface::import_shared_strings* get_shared_strings() override;
-diff --git a/sc/source/filter/orcus/interface.cxx b/sc/source/filter/orcus/interface.cxx
-index 0947b5dd650c..63926a72fc59 100644
---- a/sc/source/filter/orcus/interface.cxx
-+++ b/sc/source/filter/orcus/interface.cxx
-@@ -161,9 +161,9 @@ orcus::spreadsheet::formula_grammar_t ScOrcusGlobalSettings::get_default_formula
- ScOrcusRefResolver::ScOrcusRefResolver( const ScOrcusGlobalSettings& rGS ) :
-     mrGlobalSettings(rGS) {}
- 
--os::src_address_t ScOrcusRefResolver::resolve_address(const char* p, size_t n)
-+os::src_address_t ScOrcusRefResolver::resolve_address(std::string_view address)
- {
--    OUString aStr(p, n, mrGlobalSettings.getTextEncoding());
-+    OUString aStr(address.data(), address.size(), mrGlobalSettings.getTextEncoding());
- 
-     ScAddress aAddr;
-     aAddr.Parse(aStr, mrGlobalSettings.getDoc().getDoc(),
-@@ -173,7 +173,7 @@ os::src_address_t ScOrcusRefResolver::resolve_address(const char* p, size_t n)
-     if (!aAddr.IsValid())
-     {
-         std::ostringstream os;
--        os << "'" << std::string(p, n) << "' is not a valid address expression.";
-+        os << "'" << address << "' is not a valid address expression.";
-         throw orcus::invalid_arg_error(os.str());
-     }
- 
-@@ -185,9 +185,9 @@ os::src_address_t ScOrcusRefResolver::resolve_address(const char* p, size_t n)
-     return ret;
- }
- 
--os::src_range_t ScOrcusRefResolver::resolve_range(const char* p, size_t n)
-+os::src_range_t ScOrcusRefResolver::resolve_range(std::string_view range)
- {
--    OUString aStr(p, n, mrGlobalSettings.getTextEncoding());
-+    OUString aStr(range.data(), range.size(), mrGlobalSettings.getTextEncoding());
- 
-     ScRange aRange;
-     aRange.Parse(aStr, mrGlobalSettings.getDoc().getDoc(),
-@@ -197,7 +197,7 @@ os::src_range_t ScOrcusRefResolver::resolve_range(const char* p, size_t n)
-     if (!aRange.IsValid())
-     {
-         std::ostringstream os;
--        os << "'" << std::string(p, n) << "' is not a valid range expression.";
-+        os << "'" << range << "' is not a valid range expression.";
-         throw orcus::invalid_arg_error(os.str());
-     }
- 
-@@ -232,13 +232,13 @@ void ScOrcusNamedExpression::set_base_position(const orcus::spreadsheet::src_add
-     maBasePos.SetRow(pos.row);
- }
- 
--void ScOrcusNamedExpression::set_named_expression(const char* p_name, size_t n_name, const char* p_exp, size_t n_exp)
-+void ScOrcusNamedExpression::set_named_expression(std::string_view name, std::string_view expression)
- {
--    maName = OUString(p_name, n_name, mrGlobalSettings.getTextEncoding());
--    maExpr = OUString(p_exp, n_exp, mrGlobalSettings.getTextEncoding());
-+    maName = OUString(name.data(), name.size(), mrGlobalSettings.getTextEncoding());
-+    maExpr = OUString(expression.data(), expression.size(), mrGlobalSettings.getTextEncoding());
- }
- 
--void ScOrcusNamedExpression::set_named_range(const char* /*p_name*/, size_t /*n_name*/, const char* /*p_range*/, size_t /*n_range*/)
-+void ScOrcusNamedExpression::set_named_range(std::string_view /*name*/, std::string_view /*range*/)
- {
-     throw std::runtime_error("ScOrcusNamedExpression::set_named_range not implemented yet.");
- }
-@@ -309,9 +309,9 @@ ScOrcusFactory::ScOrcusFactory(ScDocument& rDoc, bool bSkipDefaultStyles) :
-     mnProgress(0) {}
- 
- orcus::spreadsheet::iface::import_sheet* ScOrcusFactory::append_sheet(
--    orcus::spreadsheet::sheet_t sheet_index, const char* sheet_name, size_t sheet_name_length)
-+    orcus::spreadsheet::sheet_t sheet_index, std::string_view sheet_name)
- {
--    OUString aTabName(sheet_name, sheet_name_length, maGlobalSettings.getTextEncoding());
-+    OUString aTabName(sheet_name.data(), sheet_name.size(), maGlobalSettings.getTextEncoding());
- 
-     if (sheet_index == 0)
-     {
-@@ -345,9 +345,9 @@ public:
- 
- }
- 
--orcus::spreadsheet::iface::import_sheet* ScOrcusFactory::get_sheet(const char* sheet_name, size_t sheet_name_length)
-+orcus::spreadsheet::iface::import_sheet* ScOrcusFactory::get_sheet(std::string_view sheet_name)
- {
--    OUString aTabName(sheet_name, sheet_name_length, maGlobalSettings.getTextEncoding());
-+    OUString aTabName(sheet_name.data(), sheet_name.size(), maGlobalSettings.getTextEncoding());
-     SCTAB nTab = maDoc.getSheetIndex(aTabName);
-     if (nTab < 0)
-         // Sheet by that name not found.
-@@ -777,7 +777,7 @@ void ScOrcusConditionalFormat::set_condition_type(os::condition_type_t /*type*/)
-     SAL_INFO("sc.orcus.condformat", "set_condition_type");
- }
- 
--void ScOrcusConditionalFormat::set_formula(const char* /*p*/, size_t /*n*/)
-+void ScOrcusConditionalFormat::set_formula(std::string_view /*formula*/)
- {
-     SAL_INFO("sc.orcus.condformat", "set_formula");
- }
-@@ -793,7 +793,7 @@ void ScOrcusConditionalFormat::commit_condition()
-     SAL_INFO("sc.orcus.condformat", "commit_condition");
- }
- 
--void ScOrcusConditionalFormat::set_icon_name(const char* /*p*/, size_t /*n*/)
-+void ScOrcusConditionalFormat::set_icon_name(std::string_view /*name*/)
- {
-     assert(meEntryType == ScFormatEntry::Type::Iconset);
-     SAL_INFO("sc.orcus.condformat", "set_icon_name");
-@@ -887,7 +887,7 @@ void ScOrcusConditionalFormat::commit_entry()
-     SAL_INFO("sc.orcus.condformat", "commit_entry");
- }
- 
--void ScOrcusConditionalFormat::set_range(const char* /*p*/, size_t /*n*/)
-+void ScOrcusConditionalFormat::set_range(std::string_view /*range*/)
- {
-     SAL_INFO("sc.orcus.condformat", "set_range");
- }
-@@ -930,7 +930,7 @@ void ScOrcusFormula::reset()
-     mnSharedFormulaIndex = 0;
-     mbShared = false;
-     meResType = ResultType::NotSet;
--    mnResult = 0;
-+    maResult.clear();
-     mfResult = 0.0;
- }
- 
-@@ -942,7 +942,6 @@ ScOrcusFormula::ScOrcusFormula( ScOrcusSheet& rSheet ) :
-     mnSharedFormulaIndex(0),
-     mbShared(false),
-     meResType(ResultType::NotSet),
--    mnResult(0),
-     mfResult(0.0) {}
- 
- ScOrcusFormula::~ScOrcusFormula() {}
-@@ -953,9 +952,9 @@ void ScOrcusFormula::set_position(os::row_t row, os::col_t col)
-     mnRow = row;
- }
- 
--void ScOrcusFormula::set_formula(os::formula_grammar_t grammar, const char* p, size_t n)
-+void ScOrcusFormula::set_formula(os::formula_grammar_t grammar, std::string_view formula)
- {
--    maFormula = OUString(p, n, mrSheet.getFactory().getGlobalSettings().getTextEncoding());
-+    maFormula = OUString(formula.data(), formula.size(), mrSheet.getFactory().getGlobalSettings().getTextEncoding());
-     meGrammar = getCalcGrammarFromOrcus(grammar);
- }
- 
-@@ -971,10 +970,10 @@ void ScOrcusFormula::set_result_value(double value)
-     mfResult = value;
- }
- 
--void ScOrcusFormula::set_result_string(size_t sindex)
-+void ScOrcusFormula::set_result_string(std::string_view value)
- {
-     meResType = ResultType::String;
--    mnResult = sindex;
-+    maResult = OUString(value.data(), value.size(), mrSheet.getFactory().getGlobalSettings().getTextEncoding());
- }
- 
- void ScOrcusFormula::set_result_empty()
-@@ -1028,9 +1027,7 @@ void ScOrcusFormula::commit()
-     {
-         case ResultType::String:
-         {
--            const OUString* pStr = rFactory.getString(mnResult);
--            if (pStr)
--                rFactory.pushFormulaResult(aPos, *pStr);
-+            rFactory.pushFormulaResult(aPos, maResult);
-             break;
-         }
-         case ResultType::Value:
-@@ -1073,10 +1070,10 @@ void ScOrcusArrayFormula::set_range(const os::range_t& range)
-     mnRowRange = range.last.row - range.first.column + 1;
- }
- 
--void ScOrcusArrayFormula::set_formula(os::formula_grammar_t grammar, const char* p, size_t n)
-+void ScOrcusArrayFormula::set_formula(os::formula_grammar_t grammar, std::string_view formula)
- {
-     meGrammar = getCalcGrammarFromOrcus(grammar);
--    maFormula = OUString(p, n, mrSheet.getFactory().getGlobalSettings().getTextEncoding());
-+    maFormula = OUString(formula.data(), formula.size(), mrSheet.getFactory().getGlobalSettings().getTextEncoding());
- }
- 
- void ScOrcusArrayFormula::set_result_value(os::row_t /*row*/, os::col_t /*col*/, double /*value*/)
-@@ -1084,7 +1081,7 @@ void ScOrcusArrayFormula::set_result_value(os::row_t /*row*/, os::col_t /*col*/,
-     // TODO : implement result cache for matrix
- }
- 
--void ScOrcusArrayFormula::set_result_string(os::row_t /*row*/, os::col_t /*col*/, size_t /*sindex*/)
-+void ScOrcusArrayFormula::set_result_string(os::row_t /*row*/, os::col_t /*col*/, std::string_view /*value*/)
- {
-     // TODO : implement result cache for matrix
- }
-@@ -1158,16 +1155,16 @@ os::iface::import_array_formula* ScOrcusSheet::get_array_formula()
-     return &maArrayFormula;
- }
- 
--void ScOrcusSheet::set_auto(os::row_t row, os::col_t col, const char* p, size_t n)
-+void ScOrcusSheet::set_auto(os::row_t row, os::col_t col, std::string_view value)
- {
--    OUString aVal(p, n, mrFactory.getGlobalSettings().getTextEncoding());
-+    OUString aVal(value.data(), value.size(), mrFactory.getGlobalSettings().getTextEncoding());
-     mrFactory.pushCellStoreAutoToken(ScAddress(col, row, mnTab), aVal);
-     cellInserted();
- }
- 
--void ScOrcusSheet::set_string(os::row_t row, os::col_t col, size_t sindex)
-+void ScOrcusSheet::set_string(os::row_t row, os::col_t col, os::string_id_t sindex)
- {
--    mrFactory.pushCellStoreToken(ScAddress(col, row, mnTab), uint32_t(sindex));
-+    mrFactory.pushCellStoreToken(ScAddress(col, row, mnTab), sindex);
-     cellInserted();
- }
- 
-@@ -1257,15 +1254,15 @@ ScOrcusFactory& ScOrcusSheet::getFactory()
- ScOrcusSharedStrings::ScOrcusSharedStrings(ScOrcusFactory& rFactory) :
-     mrFactory(rFactory) {}
- 
--size_t ScOrcusSharedStrings::append(const char* s, size_t n)
-+size_t ScOrcusSharedStrings::append(std::string_view s)
- {
--    OUString aNewString(s, n, mrFactory.getGlobalSettings().getTextEncoding());
-+    OUString aNewString(s.data(), s.size(), mrFactory.getGlobalSettings().getTextEncoding());
-     return mrFactory.appendString(aNewString);
- }
- 
--size_t ScOrcusSharedStrings::add(const char* s, size_t n)
-+size_t ScOrcusSharedStrings::add(std::string_view s)
- {
--    OUString aNewString(s, n, mrFactory.getGlobalSettings().getTextEncoding());
-+    OUString aNewString(s.data(), s.size(), mrFactory.getGlobalSettings().getTextEncoding());
-     return mrFactory.addString(aNewString);
- }
- 
-@@ -1281,7 +1278,7 @@ void ScOrcusSharedStrings::set_segment_italic(bool /*b*/)
- {
- }
- 
--void ScOrcusSharedStrings::set_segment_font_name(const char* /*s*/, size_t /*n*/)
-+void ScOrcusSharedStrings::set_segment_font_name(std::string_view /*s*/)
- {
- }
- 
-@@ -1296,9 +1293,9 @@ void ScOrcusSharedStrings::set_segment_font_color(orcus::spreadsheet::color_elem
- {
- }
- 
--void ScOrcusSharedStrings::append_segment(const char* s, size_t n)
-+void ScOrcusSharedStrings::append_segment(std::string_view s)
- {
--    maCurSegment.append(s, n);
-+    maCurSegment.append(s.data(), s.size());
- }
- 
- size_t ScOrcusSharedStrings::commit_segments()
-@@ -1610,9 +1607,9 @@ void ScOrcusStyles::set_font_italic(bool b)
-     maCurrentFont.mbHasFontAttr = true;
- }
- 
--void ScOrcusStyles::set_font_name(const char* s, size_t n)
-+void ScOrcusStyles::set_font_name(std::string_view name)
- {
--    OUString aName(s, n, mrFactory.getGlobalSettings().getTextEncoding());
-+    OUString aName(name.data(), name.size(), mrFactory.getGlobalSettings().getTextEncoding());
-     maCurrentFont.maName = aName;
-     maCurrentFont.mbHasFontAttr = true;
- }
-@@ -1985,9 +1982,9 @@ void ScOrcusStyles::set_number_format_identifier(size_t)
- {
- }
- 
--void ScOrcusStyles::set_number_format_code(const char* s, size_t n)
-+void ScOrcusStyles::set_number_format_code(std::string_view s)
- {
--    OUString aCode(s, n, mrFactory.getGlobalSettings().getTextEncoding());
-+    OUString aCode(s.data(), s.size(), mrFactory.getGlobalSettings().getTextEncoding());
-     maCurrentNumberFormat.maCode = aCode;
-     maCurrentNumberFormat.mbHasNumberFormatAttr = true;
- }
-@@ -2141,9 +2138,9 @@ void ScOrcusStyles::set_cell_style_count(size_t /*n*/)
-     // needed at all?
- }
- 
--void ScOrcusStyles::set_cell_style_name(const char* s, size_t n)
-+void ScOrcusStyles::set_cell_style_name(std::string_view name)
- {
--    OUString aName(s, n, mrFactory.getGlobalSettings().getTextEncoding());
-+    OUString aName(name.data(), name.size(), mrFactory.getGlobalSettings().getTextEncoding());
-     maCurrentCellStyle.maName = aName;
- }
- 
-@@ -2158,9 +2155,9 @@ void ScOrcusStyles::set_cell_style_builtin(size_t index)
-     maCurrentCellStyle.mnBuiltInId = index;
- }
- 
--void ScOrcusStyles::set_cell_style_parent_name(const char* s, size_t n)
-+void ScOrcusStyles::set_cell_style_parent_name(std::string_view name)
- {
--    OUString aParentName(s, n, mrFactory.getGlobalSettings().getTextEncoding());
-+    OUString aParentName(name.data(), name.size(), mrFactory.getGlobalSettings().getTextEncoding());
-     maCurrentCellStyle.maParentName = aParentName;
- }
- 
-@@ -2215,9 +2212,9 @@ void ScOrcusAutoFilter::set_column(orcus::spreadsheet::col_t col)
-     SAL_INFO("sc.orcus.autofilter", "set_column: " << col);
- }
- 
--void ScOrcusAutoFilter::append_column_match_value(const char* p, size_t n)
-+void ScOrcusAutoFilter::append_column_match_value(std::string_view value)
- {
--    OUString aString(p, n, mrGlobalSettings.getTextEncoding());
-+    OUString aString(value.data(), value.size(), mrGlobalSettings.getTextEncoding());
-     SAL_INFO("sc.orcus.autofilter", "append_column_match_value: " << aString);
- }
- 
-diff --git a/sc/source/filter/orcus/orcusfiltersimpl.cxx b/sc/source/filter/orcus/orcusfiltersimpl.cxx
-index f063bd3b5524..db2d5705d51e 100644
---- a/sc/source/filter/orcus/orcusfiltersimpl.cxx
-+++ b/sc/source/filter/orcus/orcusfiltersimpl.cxx
-@@ -70,7 +70,7 @@ bool loadFileContent(SfxMedium& rMedium, orcus::iface::import_filter& filter)
- 
-     try
-     {
--        filter.read_stream(aBuffer.getStr(), aBuffer.getLength());
-+        filter.read_stream(aBuffer);
-     }
-     catch (const std::exception& e)
-     {
-@@ -148,14 +148,14 @@ bool ScOrcusFiltersImpl::importODS_Styles(ScDocument& rDoc, OUString& aPath) con
-             if (GetShortPathNameW(o3tl::toW(aPath.getStr()), buf, std::size(buf)) == 0)
-                 throw;
-             aPath8 = OUStringToOString(o3tl::toU(buf), osl_getThreadTextEncoding());
--            content = std::make_unique<orcus::file_content>(aPath8.getStr());
-+            content = std::make_unique<orcus::file_content>(aPath8);
-         }
- #else
--        auto content = std::make_unique<orcus::file_content>(aPath8.getStr());
-+        auto content = std::make_unique<orcus::file_content>(aPath8);
- #endif
-         ScOrcusFactory aFactory(rDoc);
-         ScOrcusStyles aStyles(aFactory);
--        orcus::import_ods::read_styles(content->data(), content->size(), &aStyles);
-+        orcus::import_ods::read_styles(content->str(), &aStyles);
-     }
-     catch (const std::exception& e)
-     {
-diff --git a/sc/source/filter/orcus/xmlcontext.cxx b/sc/source/filter/orcus/xmlcontext.cxx
-index 1f3ee58220a0..9c73a75436bf 100644
---- a/sc/source/filter/orcus/xmlcontext.cxx
-+++ b/sc/source/filter/orcus/xmlcontext.cxx
-@@ -63,7 +63,7 @@ OUString toString(const orcus::xml_structure_tree::entity_name& entity, const or
-         aBuf.appendAscii(aShortName.c_str());
-         aBuf.append(':');
-     }
--    aBuf.append(OUString(entity.name.get(), entity.name.size(), RTL_TEXTENCODING_UTF8));
-+    aBuf.append(OUString(entity.name.data(), entity.name.size(), RTL_TEXTENCODING_UTF8));
-     return aBuf.makeStringAndClear();
- }
- 
-@@ -175,7 +175,7 @@ void ScOrcusXMLContextImpl::loadXMLStructure(weld::TreeView& rTreeCtrl, ScOrcusX
-     orcus::xml_structure_tree aXmlTree(cxt);
-     try
-     {
--        aXmlTree.parse(&aStrm[0], aStrm.size());
-+        aXmlTree.parse(aStrm);
- 
-         TreeUpdateSwitch aSwitch(rTreeCtrl);
-         rTreeCtrl.clear();
-@@ -265,14 +265,14 @@ void ScOrcusXMLContextImpl::importXML(const ScOrcusImportXMLParam& rParam)
-             std::for_each(rLink.maFieldPaths.begin(), rLink.maFieldPaths.end(),
-                 [&filter](const OString& rFieldPath)
-                 {
--                    filter.append_field_link(rFieldPath.getStr(), orcus::pstring());
-+                    filter.append_field_link(rFieldPath, std::string_view());
-                 }
-             );
- 
-             std::for_each(rLink.maRowGroups.begin(), rLink.maRowGroups.end(),
-                 [&filter] (const OString& rRowGroup)
-                 {
--                    filter.set_range_row_group(rRowGroup.getStr());
-+                    filter.set_range_row_group(rRowGroup);
-                 }
-             );
- 
-@@ -280,7 +280,7 @@ void ScOrcusXMLContextImpl::importXML(const ScOrcusImportXMLParam& rParam)
-         }
- 
-         orcus::file_content content(path);
--        filter.read_stream(content.data(), content.size());
-+        filter.read_stream(content.str());
- 
-         aFactory.finalize();
-     }
-diff --git a/sfx2/source/control/emojiview.cxx b/sfx2/source/control/emojiview.cxx
-index 7475263044e2..f125552296e4 100644
---- a/sfx2/source/control/emojiview.cxx
-+++ b/sfx2/source/control/emojiview.cxx
-@@ -21,7 +21,6 @@
- 
- #include <orcus/json_document_tree.hpp>
- #include <orcus/config.hpp>
--#include <orcus/pstring.hpp>
- #include <string>
- #include <string_view>
- #include <fstream>
-@@ -122,7 +121,7 @@ void EmojiView::Populate()
-     aEmojiInfo.load(msJSONData, config);
- 
-     node root = aEmojiInfo.get_document_root();
--    std::vector<orcus::pstring> keys = root.keys();
-+    std::vector<std::string_view> keys = root.keys();
- 
-     for (auto const& key : keys)
-     {
-@@ -131,7 +130,7 @@ void EmojiView::Populate()
-         if(value.type() == orcus::json::node_t::object)
-         {
-             // iterate each element to get the keys
--            std::vector<orcus::pstring> aEmojiParams = value.keys();
-+            std::vector<std::string_view> aEmojiParams = value.keys();
-             OUString sTitle, sCategory, sName;
-             bool bDuplicate = false;
- 
-@@ -142,15 +141,15 @@ void EmojiView::Populate()
-                 // get values of parameters in AppendItem() function
-                 if(emojiParam == "unicode")
-                 {
--                    sTitle = OStringToOUString(std::string_view( prop.string_value().get(), prop.string_value().size() ), RTL_TEXTENCODING_UTF8);
-+                    sTitle = OStringToOUString(prop.string_value(), RTL_TEXTENCODING_UTF8);
-                 }
-                 else if(emojiParam == "category")
-                 {
--                    sCategory = OStringToOUString(std::string_view( prop.string_value().get(), prop.string_value().size() ), RTL_TEXTENCODING_UTF8);
-+                    sCategory = OStringToOUString(prop.string_value(), RTL_TEXTENCODING_UTF8);
-                 }
-                 else if(emojiParam == "name")
-                 {
--                    sName = OStringToOUString(std::string_view( prop.string_value().get(), prop.string_value().size() ), RTL_TEXTENCODING_UTF8);
-+                    sName = OStringToOUString(prop.string_value(), RTL_TEXTENCODING_UTF8);
-                 }
-                 else if(emojiParam == "duplicate")
-                 {
-diff --git a/solenv/flatpak-manifest.in b/solenv/flatpak-manifest.in
-index 295b31b1d3ae..1460ae5b9a5d 100644
---- a/solenv/flatpak-manifest.in
-+++ b/solenv/flatpak-manifest.in
-@@ -397,11 +397,11 @@
-                     "dest-filename": "mariadb-connector-c-3.1.8-src.tar.gz"
-                 },
-                 {
--                    "url": "https://dev-www.libreoffice.org/src/mdds-1.7.0.tar.bz2",
--                    "sha256": "a66a2a8293a3abc6cd9baff7c236156e2666935cbfb69a15d64d38141638fecf",
-+                    "url": "https://dev-www.libreoffice.org/src/mdds-2.0.0.tar.bz2",
-+                    "sha256": "5a0fb2dd88a6420e0a69ec4c7259bcd1fe8f4a80b232c150e11f3da4c68236d7",
-                     "type": "file",
-                     "dest": "external/tarballs",
--                    "dest-filename": "mdds-1.7.0.tar.bz2"
-+                    "dest-filename": "mdds-2.0.0.tar.bz2"
-                 },
-                 {
-                     "url": "https://dev-www.libreoffice.org/src/neon-0.31.2.tar.gz",
-@@ -425,11 +425,11 @@
-                     "dest-filename": "openldap-2.4.59.tgz"
-                 },
-                 {
--                    "url": "https://dev-www.libreoffice.org/src/liborcus-0.16.1.tar.bz2",
--                    "sha256": "c700d1325f744104d9fca0d5a019434901e9d51a16eedfb05792f90a298587a4",
-+                    "url": "https://dev-www.libreoffice.org/src/liborcus-0.17.0.tar.bz2",
-+                    "sha256": "2ef9d2b5ee374c683cf631b78356b110510ab895788a68d778e225d8c4176d1b",
-                     "type": "file",
-                     "dest": "external/tarballs",
--                    "dest-filename": "liborcus-0.16.1.tar.bz2"
-+                    "dest-filename": "liborcus-0.17.0.tar.bz2"
-                 },
-                 {
-                     "url": "https://dev-www.libreoffice.org/src/poppler-21.11.0.tar.xz",
--- 
-cgit v1.2.1
-
-From 23214f1c14c4d3981dad90b6e3ba6e4ca2c8c30e Mon Sep 17 00:00:00 2001
-From: Kohei Yoshida <kohei@libreoffice.org>
-Date: Thu, 4 Nov 2021 09:58:35 -0400
-Subject: Blind fix for ubusan error
-
-from https://ci.libreoffice.org/job/lo_ubsan/2189/
-
-  [_RUN_____] Test::testCellBroadcaster
-[...]
-  ==24129==ERROR: AddressSanitizer: heap-use-after-free on address 0x61700006c470 at pc 0x2ab6e05145e4 bp 0x7ffecaa28d70 sp 0x7ffecaa28d68
-  READ of size 8 at 0x61700006c470 thread T0
-      #0 0x2ab6e05145e3 in sc::CellStoreEvent::element_block_released(mdds::mtv::base_element_block const*) /sc/source/core/data/mtvelements.cxx:47:13
-      #1 0x2ab6de749427 in mdds::mtv::soa::multi_type_vector<mdds::mtv::custom_block_func3<mdds::mtv::default_element_block<52, svl::SharedString>, mdds::mtv::noncopyable_managed_element_block<53, EditTextObject>, mdds::mtv::noncopyable_managed_element_block<54, ScFormulaCell> >, sc::CellStoreTrait>::delete_element_block(unsigned long) /workdir/UnpackedTarball/mdds/include/mdds/multi_type_vector/soa/main_def.inl:403:17
-      #2 0x2ab6de74921b in mdds::mtv::soa::multi_type_vector<mdds::mtv::custom_block_func3<mdds::mtv::default_element_block<52, svl::SharedString>, mdds::mtv::noncopyable_managed_element_block<53, EditTextObject>, mdds::mtv::noncopyable_managed_element_block<54, ScFormulaCell> >, sc::CellStoreTrait>::delete_element_blocks(unsigned long, unsigned long) /workdir/UnpackedTarball/mdds/include/mdds/multi_type_vector/soa/main_def.inl:412:9
-      #3 0x2ab6de733225 in mdds::mtv::soa::multi_type_vector<mdds::mtv::custom_block_func3<mdds::mtv::default_element_block<52, svl::SharedString>, mdds::mtv::noncopyable_managed_element_block<53, EditTextObject>, mdds::mtv::noncopyable_managed_element_block<54, ScFormulaCell> >, sc::CellStoreTrait>::clear() /workdir/UnpackedTarball/mdds/include/mdds/multi_type_vector/soa/main_def.inl:1088:5
-      #4 0x2ab6df024987 in ScColumn::FreeAll() /sc/source/core/data/column3.cxx:161:13
-      #5 0x2ab6decff134 in ScColumn::~ScColumn() /sc/source/core/data/column.cxx:97:5
-      #6 0x2ab6decf708a in o3tl::default_delete<ScColumn>::operator()(ScColumn*) /include/o3tl/deleter.hxx:55:38
-      #7 0x2ab6decf5999 in std::unique_ptr<ScColumn, o3tl::default_delete<ScColumn> >::reset(ScColumn*) /home/tdf/lode/opt_private/gcc-7.3.0/lib/gcc/x86_64-pc-linux-gnu/7.3.0/../../../../include/c++/7.3.0/bits/unique_ptr.h:376:4
-      #8 0x2ab6decf4c8e in ScColContainer::Clear() /sc/source/core/data/colcontainer.cxx:42:21
-      #9 0x2ab6decf4a84 in ScColContainer::~ScColContainer() /sc/source/core/data/colcontainer.cxx:33:5
-      #10 0x2ab6e070e3c6 in ScTable::~ScTable() /sc/source/core/data/table1.cxx:344:1
-      #11 0x2ab6df50abba in o3tl::default_delete<ScTable>::operator()(ScTable*) /include/o3tl/deleter.hxx:55:38
-      #12 0x2ab6df4c3483 in std::unique_ptr<ScTable, o3tl::default_delete<ScTable> >::~unique_ptr() /home/tdf/lode/opt_private/gcc-7.3.0/lib/gcc/x86_64-pc-linux-gnu/7.3.0/../../../../include/c++/7.3.0/bits/unique_ptr.h:268:4
-      #13 0x2ab6df4dc87c in void std::_Destroy<std::unique_ptr<ScTable, o3tl::default_delete<ScTable> > >(std::unique_ptr<ScTable, o3tl::default_delete<ScTable> >*) /home/tdf/lode/opt_private/gcc-7.3.0/lib/gcc/x86_64-pc-linux-gnu/7.3.0/../../../../include/c++/7.3.0/bits/stl_construct.h:98:19
-      #14 0x2ab6df4dc7c6 in void std::_Destroy_aux<false>::__destroy<std::unique_ptr<ScTable, o3tl::default_delete<ScTable> >*>(std::unique_ptr<ScTable, o3tl::default_delete<ScTable> >*, std::unique_ptr<ScTable, o3tl::default_delete<ScTable> >*) /home/tdf/lode/opt_private/gcc-7.3.0/lib/gcc/x86_64-pc-linux-gnu/7.3.0/../../../../include/c++/7.3.0/bits/stl_construct.h:108:6
-      #15 0x2ab6df4dc744 in void std::_Destroy<std::unique_ptr<ScTable, o3tl::default_delete<ScTable> >*>(std::unique_ptr<ScTable, o3tl::default_delete<ScTable> >*, std::unique_ptr<ScTable, o3tl::default_delete<ScTable> >*) /home/tdf/lode/opt_private/gcc-7.3.0/lib/gcc/x86_64-pc-linux-gnu/7.3.0/../../../../include/c++/7.3.0/bits/stl_construct.h:136:7
-      #16 0x2ab6df4dc488 in void std::_Destroy<std::unique_ptr<ScTable, o3tl::default_delete<ScTable> >*, std::unique_ptr<ScTable, o3tl::default_delete<ScTable> > >(std::unique_ptr<ScTable, o3tl::default_delete<ScTable> >*, std::unique_ptr<ScTable, o3tl::default_delete<ScTable> >*, std::allocator<std::unique_ptr<ScTable, o3tl::default_delete<ScTable> > >&) /home/tdf/lode/opt_private/gcc-7.3.0/lib/gcc/x86_64-pc-linux-gnu/7.3.0/../../../../include/c++/7.3.0/bits/stl_construct.h:206:7
-      #17 0x2ab6df50df73 in std::__cxx1998::vector<std::unique_ptr<ScTable, o3tl::default_delete<ScTable> >, std::allocator<std::unique_ptr<ScTable, o3tl::default_delete<ScTable> > > >::_M_erase_at_end(std::unique_ptr<ScTable, o3tl::default_delete<ScTable> >*) /home/tdf/lode/opt_private/gcc-7.3.0/lib/gcc/x86_64-pc-linux-gnu/7.3.0/../../../../include/c++/7.3.0/bits/stl_vector.h:1513:2
-      #18 0x2ab6df70f5b0 in std::__cxx1998::vector<std::unique_ptr<ScTable, o3tl::default_delete<ScTable> >, std::allocator<std::unique_ptr<ScTable, o3tl::default_delete<ScTable> > > >::clear() /home/tdf/lode/opt_private/gcc-7.3.0/lib/gcc/x86_64-pc-linux-gnu/7.3.0/../../../../include/c++/7.3.0/bits/stl_vector.h:1248:9
-      #19 0x2ab6df70b5d4 in std::__debug::vector<std::unique_ptr<ScTable, o3tl::default_delete<ScTable> >, std::allocator<std::unique_ptr<ScTable, o3tl::default_delete<ScTable> > > >::clear() /home/tdf/lode/opt_private/gcc-7.3.0/lib/gcc/x86_64-pc-linux-gnu/7.3.0/../../../../include/c++/7.3.0/debug/vector:699:9
-      #20 0x2ab6df704cb2 in ScDocument::Clear(bool) /sc/source/core/data/documen9.cxx:506:12
-      #21 0x2ab6df490652 in ScDocument::~ScDocument() /sc/source/core/data/documen2.cxx:363:5
-      #22 0x2ab6e363315d in ScDocShell::~ScDocShell() /sc/source/ui/docshell/docsh.cxx:2925:1
-      #23 0x2ab6e363333b in ScDocShell::~ScDocShell() /sc/source/ui/docshell/docsh.cxx:2894:1
-      #24 0x2ab6e3633514 in ScDocShell::~ScDocShell() /sc/source/ui/docshell/docsh.cxx:2894:1
-      #25 0x2ab6de4f105d in SvRefBase::ReleaseRef() /include/tools/ref.hxx:163:29
-      #26 0x2ab6de4a6259 in tools::SvRef<ScDocShell>::clear() /include/tools/ref.hxx:64:22
-      #27 0x2ab6de2b1aaa in Test::closeDocShell(tools::SvRef<ScDocShell>&) /sc/qa/unit/ucalc.cxx:365:18
-      #28 0x2ab6de2b2102 in Test::tearDown() /sc/qa/unit/ucalc.cxx:380:5
-      #29 0x2ab6de543787 in CppUnit::TestCaller<Test>::tearDown() /workdir/UnpackedTarball/cppunit/include/cppunit/TestCaller.h:185:15
-      #30 0x2ab69335765a in CppUnit::TestCaseMethodFunctor::operator()() const /workdir/UnpackedTarball/cppunit/src/cppunit/TestCase.cpp:32:5
-      #31 0x2ab6ae4f3957 in (anonymous namespace)::Protector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) /test/source/vclbootstrapprotector.cxx:46:14
-      #32 0x2ab693328cd7 in CppUnit::ProtectorChain::ProtectFunctor::operator()() const /workdir/UnpackedTarball/cppunit/src/cppunit/ProtectorChain.cpp:20:25
-      #33 0x2ab6a2974ff7 in (anonymous namespace)::Prot::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) /unotest/source/cpp/unobootstrapprotector/unobootstrapprotector.cxx:78:12
-      #34 0x2ab693328cd7 in CppUnit::ProtectorChain::ProtectFunctor::operator()() const /workdir/UnpackedTarball/cppunit/src/cppunit/ProtectorChain.cpp:20:25
-      #35 0x2ab69f4479c2 in (anonymous namespace)::Prot::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) /unotest/source/cpp/unoexceptionprotector/unoexceptionprotector.cxx:62:16
-      #36 0x2ab693328cd7 in CppUnit::ProtectorChain::ProtectFunctor::operator()() const /workdir/UnpackedTarball/cppunit/src/cppunit/ProtectorChain.cpp:20:25
-      #37 0x2ab6932bfff4 in CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) /workdir/UnpackedTarball/cppunit/src/cppunit/DefaultProtector.cpp:15:12
-      #38 0x2ab693328cd7 in CppUnit::ProtectorChain::ProtectFunctor::operator()() const /workdir/UnpackedTarball/cppunit/src/cppunit/ProtectorChain.cpp:20:25
-      #39 0x2ab69332272c in CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) /workdir/UnpackedTarball/cppunit/src/cppunit/ProtectorChain.cpp:86:18
-      #40 0x2ab6933c1b39 in CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /workdir/UnpackedTarball/cppunit/src/cppunit/TestResult.cpp:182:28
-      #41 0x2ab693356092 in CppUnit::TestCase::run(CppUnit::TestResult*) /workdir/UnpackedTarball/cppunit/src/cppunit/TestCase.cpp:95:11
-      #42 0x2ab693359af2 in CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) /workdir/UnpackedTarball/cppunit/src/cppunit/TestComposite.cpp:64:30
-      #43 0x2ab693358cea in CppUnit::TestComposite::run(CppUnit::TestResult*) /workdir/UnpackedTarball/cppunit/src/cppunit/TestComposite.cpp:23:3
-      #44 0x2ab693359af2 in CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) /workdir/UnpackedTarball/cppunit/src/cppunit/TestComposite.cpp:64:30
-      #45 0x2ab693358cea in CppUnit::TestComposite::run(CppUnit::TestResult*) /workdir/UnpackedTarball/cppunit/src/cppunit/TestComposite.cpp:23:3
-      #46 0x2ab6933ef6ce in CppUnit::TestRunner::WrappingSuite::run(CppUnit::TestResult*) /workdir/UnpackedTarball/cppunit/src/cppunit/TestRunner.cpp:47:27
-      #47 0x2ab6933c059e in CppUnit::TestResult::runTest(CppUnit::Test*) /workdir/UnpackedTarball/cppunit/src/cppunit/TestResult.cpp:149:9
-      #48 0x2ab6933f062b in CppUnit::TestRunner::run(CppUnit::TestResult&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /workdir/UnpackedTarball/cppunit/src/cppunit/TestRunner.cpp:96:14
-      #49 0x4ff1d5 in (anonymous namespace)::ProtectedFixtureFunctor::run() const /sal/cppunittester/cppunittester.cxx:329:20
-      #50 0x4fbbc5 in main2() /sal/cppunittester/cppunittester.cxx:478:16
-      #51 0x4fa052 in sal_main() /sal/cppunittester/cppunittester.cxx:614:14
-      #52 0x4f9e9e in main /sal/cppunittester/cppunittester.cxx:609:1
-      #53 0x2ab69517d554 in __libc_start_main (/lib64/libc.so.6+0x22554)
-      #54 0x425894 in _start (/workdir/LinkTarget/Executable/cppunittester+0x425894)
-
-  0x61700006c470 is located 752 bytes inside of 768-byte region [0x61700006c180,0x61700006c480)
-  freed by thread T0 here:
-      #0 0x4f7548 in operator delete(void*, unsigned long) /home/tdf/lode/packages/llvm-llvmorg-9.0.1.src/compiler-rt/lib/asan/asan_new_delete.cc:172
-      #1 0x2ab6decf709b in o3tl::default_delete<ScColumn>::operator()(ScColumn*) /include/o3tl/deleter.hxx:55:38
-      #2 0x2ab6decf5999 in std::unique_ptr<ScColumn, o3tl::default_delete<ScColumn> >::reset(ScColumn*) /home/tdf/lode/opt_private/gcc-7.3.0/lib/gcc/x86_64-pc-linux-gnu/7.3.0/../../../../include/c++/7.3.0/bits/unique_ptr.h:376:4
-      #3 0x2ab6decf4c8e in ScColContainer::Clear() /sc/source/core/data/colcontainer.cxx:42:21
-      #4 0x2ab6decf4a84 in ScColContainer::~ScColContainer() /sc/source/core/data/colcontainer.cxx:33:5
-      #5 0x2ab6e070e3c6 in ScTable::~ScTable() /sc/source/core/data/table1.cxx:344:1
-      #6 0x2ab6df50abba in o3tl::default_delete<ScTable>::operator()(ScTable*) /include/o3tl/deleter.hxx:55:38
-      #7 0x2ab6df4c3483 in std::unique_ptr<ScTable, o3tl::default_delete<ScTable> >::~unique_ptr() /home/tdf/lode/opt_private/gcc-7.3.0/lib/gcc/x86_64-pc-linux-gnu/7.3.0/../../../../include/c++/7.3.0/bits/unique_ptr.h:268:4
-      #8 0x2ab6df4dc87c in void std::_Destroy<std::unique_ptr<ScTable, o3tl::default_delete<ScTable> > >(std::unique_ptr<ScTable, o3tl::default_delete<ScTable> >*) /home/tdf/lode/opt_private/gcc-7.3.0/lib/gcc/x86_64-pc-linux-gnu/7.3.0/../../../../include/c++/7.3.0/bits/stl_construct.h:98:19
-      #9 0x2ab6df4dc7c6 in void std::_Destroy_aux<false>::__destroy<std::unique_ptr<ScTable, o3tl::default_delete<ScTable> >*>(std::unique_ptr<ScTable, o3tl::default_delete<ScTable> >*, std::unique_ptr<ScTable, o3tl::default_delete<ScTable> >*) /home/tdf/lode/opt_private/gcc-7.3.0/lib/gcc/x86_64-pc-linux-gnu/7.3.0/../../../../include/c++/7.3.0/bits/stl_construct.h:108:6
-      #10 0x2ab6df4dc744 in void std::_Destroy<std::unique_ptr<ScTable, o3tl::default_delete<ScTable> >*>(std::unique_ptr<ScTable, o3tl::default_delete<ScTable> >*, std::unique_ptr<ScTable, o3tl::default_delete<ScTable> >*) /home/tdf/lode/opt_private/gcc-7.3.0/lib/gcc/x86_64-pc-linux-gnu/7.3.0/../../../../include/c++/7.3.0/bits/stl_construct.h:136:7
-      #11 0x2ab6df4dc488 in void std::_Destroy<std::unique_ptr<ScTable, o3tl::default_delete<ScTable> >*, std::unique_ptr<ScTable, o3tl::default_delete<ScTable> > >(std::unique_ptr<ScTable, o3tl::default_delete<ScTable> >*, std::unique_ptr<ScTable, o3tl::default_delete<ScTable> >*, std::allocator<std::unique_ptr<ScTable, o3tl::default_delete<ScTable> > >&) /home/tdf/lode/opt_private/gcc-7.3.0/lib/gcc/x86_64-pc-linux-gnu/7.3.0/../../../../include/c++/7.3.0/bits/stl_construct.h:206:7
-      #12 0x2ab6df50df73 in std::__cxx1998::vector<std::unique_ptr<ScTable, o3tl::default_delete<ScTable> >, std::allocator<std::unique_ptr<ScTable, o3tl::default_delete<ScTable> > > >::_M_erase_at_end(std::unique_ptr<ScTable, o3tl::default_delete<ScTable> >*) /home/tdf/lode/opt_private/gcc-7.3.0/lib/gcc/x86_64-pc-linux-gnu/7.3.0/../../../../include/c++/7.3.0/bits/stl_vector.h:1513:2
-      #13 0x2ab6df70f5b0 in std::__cxx1998::vector<std::unique_ptr<ScTable, o3tl::default_delete<ScTable> >, std::allocator<std::unique_ptr<ScTable, o3tl::default_delete<ScTable> > > >::clear() /home/tdf/lode/opt_private/gcc-7.3.0/lib/gcc/x86_64-pc-linux-gnu/7.3.0/../../../../include/c++/7.3.0/bits/stl_vector.h:1248:9
-      #14 0x2ab6df70b5d4 in std::__debug::vector<std::unique_ptr<ScTable, o3tl::default_delete<ScTable> >, std::allocator<std::unique_ptr<ScTable, o3tl::default_delete<ScTable> > > >::clear() /home/tdf/lode/opt_private/gcc-7.3.0/lib/gcc/x86_64-pc-linux-gnu/7.3.0/../../../../include/c++/7.3.0/debug/vector:699:9
-      #15 0x2ab6df704cb2 in ScDocument::Clear(bool) /sc/source/core/data/documen9.cxx:506:12
-      #16 0x2ab6df490652 in ScDocument::~ScDocument() /sc/source/core/data/documen2.cxx:363:5
-      #17 0x2ab6e363315d in ScDocShell::~ScDocShell() /sc/source/ui/docshell/docsh.cxx:2925:1
-      #18 0x2ab6e363333b in ScDocShell::~ScDocShell() /sc/source/ui/docshell/docsh.cxx:2894:1
-      #19 0x2ab6e3633514 in ScDocShell::~ScDocShell() /sc/source/ui/docshell/docsh.cxx:2894:1
-      #20 0x2ab6de4f105d in SvRefBase::ReleaseRef() /include/tools/ref.hxx:163:29
-      #21 0x2ab6de4a6259 in tools::SvRef<ScDocShell>::clear() /include/tools/ref.hxx:64:22
-      #22 0x2ab6de2b1aaa in Test::closeDocShell(tools::SvRef<ScDocShell>&) /sc/qa/unit/ucalc.cxx:365:18
-      #23 0x2ab6de2b2102 in Test::tearDown() /sc/qa/unit/ucalc.cxx:380:5
-      #24 0x2ab6de543787 in CppUnit::TestCaller<Test>::tearDown() /workdir/UnpackedTarball/cppunit/include/cppunit/TestCaller.h:185:15
-      #25 0x2ab69335765a in CppUnit::TestCaseMethodFunctor::operator()() const /workdir/UnpackedTarball/cppunit/src/cppunit/TestCase.cpp:32:5
-      #26 0x2ab6ae4f3957 in (anonymous namespace)::Protector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) /test/source/vclbootstrapprotector.cxx:46:14
-      #27 0x2ab693328cd7 in CppUnit::ProtectorChain::ProtectFunctor::operator()() const /workdir/UnpackedTarball/cppunit/src/cppunit/ProtectorChain.cpp:20:25
-      #28 0x2ab6a2974ff7 in (anonymous namespace)::Prot::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) /unotest/source/cpp/unobootstrapprotector/unobootstrapprotector.cxx:78:12
-      #29 0x2ab693328cd7 in CppUnit::ProtectorChain::ProtectFunctor::operator()() const /workdir/UnpackedTarball/cppunit/src/cppunit/ProtectorChain.cpp:20:25
-
-during CppunitTest_sc_ucalc
-
-Change-Id: I778984beb9d1e355d3b8f9617b193424f332a32e
-Reviewed-on: https://gerrit.libreoffice.org/c/core/+/124709
-Tested-by: Jenkins
-Reviewed-by: Kohei Yoshida <kohei@libreoffice.org>
----
- sc/inc/column.hxx                   | 2 --
- sc/inc/mtvelements.hxx              | 3 +++
- sc/source/core/data/column.cxx      | 3 +--
- sc/source/core/data/column3.cxx     | 2 ++
- sc/source/core/data/mtvelements.cxx | 5 +++++
- 5 files changed, 11 insertions(+), 4 deletions(-)
-
-diff --git a/sc/inc/column.hxx b/sc/inc/column.hxx
-index 6300fe70bca1..4c08e7b41479 100644
---- a/sc/inc/column.hxx
-+++ b/sc/inc/column.hxx
-@@ -123,8 +123,6 @@ class ScColumn
-     // Broadcasters for formula cells.
-     sc::BroadcasterStoreType maBroadcasters;
- 
--    sc::CellStoreEvent maCellsEvent;
--
-     // Cell values.
-     sc::CellStoreType maCells;
- 
-diff --git a/sc/inc/mtvelements.hxx b/sc/inc/mtvelements.hxx
-index 636706e0c234..05a0970bd64d 100644
---- a/sc/inc/mtvelements.hxx
-+++ b/sc/inc/mtvelements.hxx
-@@ -95,6 +95,9 @@ public:
- 
-     void element_block_acquired(const mdds::mtv::base_element_block* block);
-     void element_block_released(const mdds::mtv::base_element_block* block);
-+
-+    /** Stop processing events. */
-+    void stop();
- };
- 
- struct CellStoreTrait
-diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx
-index 4bd91f60f3a0..3b148dda6b88 100644
---- a/sc/source/core/data/column.cxx
-+++ b/sc/source/core/data/column.cxx
-@@ -82,8 +82,7 @@ ScColumn::ScColumn(ScSheetLimits const & rSheetLimits) :
-     maCellTextAttrs(rSheetLimits.GetMaxRowCount()),
-     maCellNotes(rSheetLimits.GetMaxRowCount()),
-     maBroadcasters(rSheetLimits.GetMaxRowCount()),
--    maCellsEvent(this),
--    maCells(maCellsEvent),
-+    maCells(sc::CellStoreEvent(this)),
-     mnBlkCountFormula(0),
-     nCol( 0 ),
-     nTab( 0 ),
-diff --git a/sc/source/core/data/column3.cxx b/sc/source/core/data/column3.cxx
-index 9bbd9c1bca77..4a062a476a32 100644
---- a/sc/source/core/data/column3.cxx
-+++ b/sc/source/core/data/column3.cxx
-@@ -156,6 +156,8 @@ void ScColumn::Delete( SCROW nRow )
- 
- void ScColumn::FreeAll()
- {
-+    maCells.event_handler().stop();
-+
-     auto maxRowCount = GetDoc().GetSheetLimits().GetMaxRowCount();
-     // Keep a logical empty range of 0-rDoc.MaxRow() at all times.
-     maCells.clear();
-diff --git a/sc/source/core/data/mtvelements.cxx b/sc/source/core/data/mtvelements.cxx
-index c7d7e52bfccf..ee6c9cf1499c 100644
---- a/sc/source/core/data/mtvelements.cxx
-+++ b/sc/source/core/data/mtvelements.cxx
-@@ -51,6 +51,11 @@ void CellStoreEvent::element_block_released(const mdds::mtv::base_element_block*
-     }
- }
- 
-+void CellStoreEvent::stop()
-+{
-+    mpCol = nullptr;
-+}
-+
- ColumnBlockPositionSet::ColumnBlockPositionSet(ScDocument& rDoc) : mrDoc(rDoc) {}
- 
- ColumnBlockPosition* ColumnBlockPositionSet::getBlockPosition(SCTAB nTab, SCCOL nCol)
--- 
-cgit v1.2.1
-
-From 037d5454a39260635aeb7064ac32c7a485af8197 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
-Date: Wed, 17 Nov 2021 10:27:03 +0000
-Subject: crashtesting: crash on passing null to std::string_view
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-with many documents, e.g. moz377878-1.xhtml
-
-https: //gitlab.com/orcus/orcus/-/merge_requests/113
-Change-Id: I085543ebb28c02a1c0ec487b357f6e0a83004363
-Reviewed-on: https://gerrit.libreoffice.org/c/core/+/125378
-Tested-by: Caolán McNamara <caolanm@redhat.com>
-Reviewed-by: Caolán McNamara <caolanm@redhat.com>
----
- external/liborcus/UnpackedTarball_liborcus.mk      |  4 ++++
- ...crash-on-passing-null-to-std-string_vie.patch.1 | 27 ++++++++++++++++++++++
- 2 files changed, 31 insertions(+)
- create mode 100644 external/liborcus/crashtesting-crash-on-passing-null-to-std-string_vie.patch.1
-
-diff --git a/external/liborcus/UnpackedTarball_liborcus.mk b/external/liborcus/UnpackedTarball_liborcus.mk
-index 3d2cec42e55e..86c30431e05d 100644
---- a/external/liborcus/UnpackedTarball_liborcus.mk
-+++ b/external/liborcus/UnpackedTarball_liborcus.mk
-@@ -15,6 +15,9 @@ $(eval $(call gb_UnpackedTarball_set_patchlevel,liborcus,1))
- 
- $(eval $(call gb_UnpackedTarball_update_autoconf_configs,liborcus))
- 
-+# crashtesting-crash-on-passing-null-to-std-string_vie.patch.1 submitted as
-+# https://gitlab.com/orcus/orcus/-/merge_requests/113
-+
- $(eval $(call gb_UnpackedTarball_add_patches,liborcus,\
- 	external/liborcus/rpath.patch.0 \
- 	external/liborcus/gcc9.patch.0 \
-@@ -37,6 +37,7 @@
- 	external/liborcus/unused-variables.patch.1 \
- 	external/liborcus/boost-filesystem.patch.1 \
- 	external/liborcus/std-get-busted.patch.1 \
-+	external/liborcus/crashtesting-crash-on-passing-null-to-std-string_vie.patch.1 \
- 	external/liborcus/forcepoint-83.patch.1 \
- 	external/liborcus/forcepoint-84.patch.1 \
- 	external/liborcus/forcepoint-87.patch.1 \
-diff --git a/external/liborcus/crashtesting-crash-on-passing-null-to-std-string_vie.patch.1 b/external/liborcus/crashtesting-crash-on-passing-null-to-std-string_vie.patch.1
-new file mode 100644
-index 000000000000..97e7b8366fde
---- /dev/null
-+++ b/external/liborcus/crashtesting-crash-on-passing-null-to-std-string_vie.patch.1
-@@ -0,0 +1,27 @@
-+From ed21a93e132b968d8cd91aa080e1f90e980267c7 Mon Sep 17 00:00:00 2001
-+From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
-+Date: Wed, 17 Nov 2021 10:21:32 +0000
-+Subject: [PATCH] crashtesting: crash on passing null to std::string_view
-+
-+with many documents, e.g. moz377878-1.xhtml
-+---
-+ src/parser/xml_namespace.cpp | 3 ++-
-+ 1 file changed, 2 insertions(+), 1 deletion(-)
-+
-+diff --git a/src/parser/xml_namespace.cpp b/src/parser/xml_namespace.cpp
-+index 07942563..66077d9c 100644
-+--- a/src/parser/xml_namespace.cpp
-++++ b/src/parser/xml_namespace.cpp
-+@@ -223,7 +223,8 @@ xmlns_id_t xmlns_context::push(std::string_view key, std::string_view uri)
-+ #endif
-+     mp_impl->m_trim_all_ns = true;
-+ 
-+-    std::string_view uri_interned = mp_impl->repo->intern(uri);
-++    xmlns_id_t id = mp_impl->repo->intern(uri);
-++    std::string_view uri_interned = id ? std::string_view(id) : std::string_view();
-+ 
-+     if (key.empty())
-+     {
-+-- 
-+2.33.1
-+
--- 
-cgit v1.2.1
-
-From dd4d715ef775db456c0c9653a3d9f9b439e82e8e Mon Sep 17 00:00:00 2001
-From: Kohei Yoshida <kohei@libreoffice.org>
-Date: Fri, 10 Dec 2021 22:02:24 -0500
-Subject: Update liborcus to 0.17.2.
-
-Change-Id: I76c0d57da63c1e35f80b13071793dbbb27cb218a
-Reviewed-on: https://gerrit.libreoffice.org/c/core/+/126655
-Tested-by: Jenkins
-Reviewed-by: Kohei Yoshida <kohei@libreoffice.org>
-(cherry picked from commit aadbac5467bb6ab768f87ed6ec003c55159d54aa)
-Reviewed-on: https://gerrit.libreoffice.org/c/core/+/126886
----
- download.lst                                       |    4 +-
- external/liborcus/Library_orcus.mk                 |    3 +
- external/liborcus/UnpackedTarball_liborcus.mk      |    4 -
- external/liborcus/boost-filesystem.patch.1         |   41 -
- ...crash-on-passing-null-to-std-string_vie.patch.1 |   27 -
- external/liborcus/remove-unused-parameters.patch.1 | 1209 --------------------
- external/liborcus/unused-variables.patch.1         |   24 -
- external/liborcus/windows-constants-hack.patch     |    4 +-
- sc/source/filter/orcus/interface.cxx               |    7 +-
- 9 files changed, 10 insertions(+), 1313 deletions(-)
- delete mode 100644 external/liborcus/boost-filesystem.patch.1
- delete mode 100644 external/liborcus/crashtesting-crash-on-passing-null-to-std-string_vie.patch.1
- delete mode 100644 external/liborcus/remove-unused-parameters.patch.1
- delete mode 100644 external/liborcus/unused-variables.patch.1
-
-diff --git a/download.lst b/download.lst
-index 8dd656fd5de9..b2ca26814d5b 100644
---- a/download.lst
-+++ b/download.lst
-@@ -204,8 +204,8 @@ export OPENLDAP_SHA256SUM := 99f37d6747d88206c470067eda624d5e48c1011e943ec0ab217
- export OPENLDAP_TARBALL := openldap-2.4.59.tgz
- export OPENSSL_SHA256SUM := 0b7a3e5e59c34827fe0c3a74b7ec8baef302b98fa80088d7f9153aa16fa76bd1
- export OPENSSL_TARBALL := openssl-1.1.1l.tar.gz
--export ORCUS_SHA256SUM := 2ef9d2b5ee374c683cf631b78356b110510ab895788a68d778e225d8c4176d1b
--export ORCUS_TARBALL := liborcus-0.17.0.tar.bz2
-+export ORCUS_SHA256SUM := 2a86c405a5929f749b27637509596421d46805753364ab258b035fd01fbde143
-+export ORCUS_TARBALL := liborcus-0.17.2.tar.bz2
- export PAGEMAKER_SHA256SUM := 66adacd705a7d19895e08eac46d1e851332adf2e736c566bef1164e7a442519d
- export PAGEMAKER_TARBALL := libpagemaker-0.0.4.tar.xz
- export PDFIUM_SHA256SUM := 26a03dd60e5ed0979cdaba9cc848242895110ddfdf347d40989ce2f14020f304
-diff --git a/external/liborcus/Library_orcus.mk b/external/liborcus/Library_orcus.mk
-index 0a0ca582882a..3c318797a031 100644
---- a/external/liborcus/Library_orcus.mk
-+++ b/external/liborcus/Library_orcus.mk
-@@ -132,12 +132,15 @@ $(eval $(call gb_Library_add_generated_exception_objects,orcus,\
- 	UnpackedTarball/liborcus/src/liborcus/xlsx_workbook_context \
- 	UnpackedTarball/liborcus/src/liborcus/xml_context_base \
- 	UnpackedTarball/liborcus/src/liborcus/xml_context_global \
-+	UnpackedTarball/liborcus/src/liborcus/xml_element_validator \
-+	UnpackedTarball/liborcus/src/liborcus/xml_empty_context \
- 	UnpackedTarball/liborcus/src/liborcus/xml_map_tree \
- 	UnpackedTarball/liborcus/src/liborcus/xml_simple_stream_handler \
- 	UnpackedTarball/liborcus/src/liborcus/xml_stream_handler \
- 	UnpackedTarball/liborcus/src/liborcus/xml_stream_parser \
- 	UnpackedTarball/liborcus/src/liborcus/xml_structure_mapper \
- 	UnpackedTarball/liborcus/src/liborcus/xml_structure_tree \
-+	UnpackedTarball/liborcus/src/liborcus/xml_util \
- 	UnpackedTarball/liborcus/src/liborcus/xpath_parser \
- 	UnpackedTarball/liborcus/src/liborcus/yaml_document_tree \
- ))
-diff --git a/external/liborcus/UnpackedTarball_liborcus.mk b/external/liborcus/UnpackedTarball_liborcus.mk
-index 86c30431e05d..87e462e33d91 100644
---- a/external/liborcus/UnpackedTarball_liborcus.mk
-+++ b/external/liborcus/UnpackedTarball_liborcus.mk
-@@ -33,11 +33,7 @@
- 	external/liborcus/libtool.patch.0 \
- 	external/liborcus/fix-pch.patch.0 \
- 	external/liborcus/liborcus_newline.patch.1 \
--	external/liborcus/remove-unused-parameters.patch.1 \
--	external/liborcus/unused-variables.patch.1 \
--	external/liborcus/boost-filesystem.patch.1 \
- 	external/liborcus/std-get-busted.patch.1 \
--	external/liborcus/crashtesting-crash-on-passing-null-to-std-string_vie.patch.1 \
- 	external/liborcus/forcepoint-83.patch.1 \
- 	external/liborcus/forcepoint-84.patch.1 \
- 	external/liborcus/forcepoint-87.patch.1 \
-diff --git a/external/liborcus/boost-filesystem.patch.1 b/external/liborcus/boost-filesystem.patch.1
-deleted file mode 100644
-index 14128b4e1c67..000000000000
---- a/external/liborcus/boost-filesystem.patch.1
-+++ /dev/null
-@@ -1,41 +0,0 @@
--From e44737bad582fa2a05a23820e49d7930db710412 Mon Sep 17 00:00:00 2001
--From: Kohei Yoshida <kohei.yoshida@gmail.com>
--Date: Tue, 2 Nov 2021 21:33:19 -0400
--Subject: [PATCH] Try using boost::filesystem instead of std::filesystem.
--
--std::filesystem still seems unreliable.
-----
-- src/parser/stream.cpp | 6 +++---
-- 1 file changed, 3 insertions(+), 3 deletions(-)
--
--diff --git a/src/parser/stream.cpp b/src/parser/stream.cpp
--index 09855300..00395f59 100644
----- a/src/parser/stream.cpp
--+++ b/src/parser/stream.cpp
--@@ -17,12 +17,12 @@
-- #include <locale>
-- #include <codecvt>
-- #include <iostream>
---#include <filesystem>
-- 
--+#include <boost/filesystem.hpp>
-- #include <boost/interprocess/file_mapping.hpp>
-- #include <boost/interprocess/mapped_region.hpp>
-- 
---namespace fs = std::filesystem;
--+namespace fs = boost::filesystem;
-- namespace bip = boost::interprocess;
-- 
-- namespace orcus {
--@@ -162,7 +162,7 @@ struct file_content::impl
--     impl() : content_size(0), content(nullptr) {}
-- 
--     impl(std::string_view filepath) :
---        content_size(fs::file_size(filepath)),
--+        content_size(fs::file_size(std::string{filepath}.c_str())),
--         mapped_file(std::string{filepath}.c_str(), bip::read_only),
--         mapped_region(mapped_file, bip::read_only, 0, content_size),
--         content(nullptr)
---- 
--2.25.1
--
-diff --git a/external/liborcus/crashtesting-crash-on-passing-null-to-std-string_vie.patch.1 b/external/liborcus/crashtesting-crash-on-passing-null-to-std-string_vie.patch.1
-deleted file mode 100644
-index 97e7b8366fde..000000000000
---- a/external/liborcus/crashtesting-crash-on-passing-null-to-std-string_vie.patch.1
-+++ /dev/null
-@@ -1,27 +0,0 @@
--From ed21a93e132b968d8cd91aa080e1f90e980267c7 Mon Sep 17 00:00:00 2001
--From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
--Date: Wed, 17 Nov 2021 10:21:32 +0000
--Subject: [PATCH] crashtesting: crash on passing null to std::string_view
--
--with many documents, e.g. moz377878-1.xhtml
-----
-- src/parser/xml_namespace.cpp | 3 ++-
-- 1 file changed, 2 insertions(+), 1 deletion(-)
--
--diff --git a/src/parser/xml_namespace.cpp b/src/parser/xml_namespace.cpp
--index 07942563..66077d9c 100644
----- a/src/parser/xml_namespace.cpp
--+++ b/src/parser/xml_namespace.cpp
--@@ -223,7 +223,8 @@ xmlns_id_t xmlns_context::push(std::string_view key, std::string_view uri)
-- #endif
--     mp_impl->m_trim_all_ns = true;
-- 
---    std::string_view uri_interned = mp_impl->repo->intern(uri);
--+    xmlns_id_t id = mp_impl->repo->intern(uri);
--+    std::string_view uri_interned = id ? std::string_view(id) : std::string_view();
-- 
--     if (key.empty())
--     {
---- 
--2.33.1
--
-diff --git a/external/liborcus/remove-unused-parameters.patch.1 b/external/liborcus/remove-unused-parameters.patch.1
-deleted file mode 100644
-index 251ed804acaf..000000000000
---- a/external/liborcus/remove-unused-parameters.patch.1
-+++ /dev/null
-@@ -1,1209 +0,0 @@
--From 5bb64db5ecfd1dc3be3304092f4bdebff54deae5 Mon Sep 17 00:00:00 2001
--From: Kohei Yoshida <kohei.yoshida@gmail.com>
--Date: Tue, 2 Nov 2021 19:33:29 -0400
--Subject: [PATCH] Remove unused parameter warnings.
--
-----
-- doc_example/json_parser_1.cpp                 |  4 +-
-- ...preadsheet_doc_2_sheets_no_string_pool.cpp | 22 ++++-----
-- .../spreadsheet_doc_2_sheets_with_formula.cpp | 47 +++++++++----------
-- ...eadsheet_doc_2_sheets_with_string_pool.cpp | 40 +++++++---------
-- doc_example/xml_mapping_1.cpp                 |  2 +-
-- src/liborcus/css_document_tree.cpp            |  3 ++
-- src/liborcus/dom_tree.cpp                     |  2 +-
-- src/liborcus/gnumeric_cell_context_test.cpp   | 14 +++---
-- src/liborcus/json_document_tree.cpp           |  6 +--
-- src/liborcus/json_structure_mapper.cpp        |  2 +-
-- src/liborcus/json_structure_tree.cpp          |  4 +-
-- src/liborcus/mock_spreadsheet.cpp             | 14 +++---
-- src/liborcus/ods_dde_links_context.cpp        | 10 ++--
-- src/liborcus/opc_context.cpp                  | 16 +++----
-- src/liborcus/orcus_json.cpp                   |  4 +-
-- src/liborcus/orcus_xml_map_def.cpp            |  4 +-
-- src/liborcus/spreadsheet_interface.cpp        |  4 +-
-- src/liborcus/xls_xml_context.cpp              | 12 ++---
-- src/liborcus/xls_xml_detection_handler.cpp    |  2 +-
-- src/liborcus/xlsx_drawing_context.cpp         |  2 +-
-- src/liborcus/xlsx_sheet_context.cpp           |  2 +-
-- src/liborcus/xlsx_sheet_context_test.cpp      |  8 ++--
-- src/liborcus/xlsx_table_context.cpp           |  2 +-
-- src/liborcus/xml_structure_tree.cpp           |  6 +--
-- src/liborcus/xpath_parser_test.cpp            |  2 +-
-- src/orcus_env_dump.cpp                        |  2 +-
-- src/orcus_test_json_mapped.cpp                |  2 +-
-- src/orcus_test_xml.cpp                        |  2 +-
-- src/orcus_test_xml_mapped.cpp                 |  2 +-
-- src/parser/sax_token_parser_test.cpp          |  2 +-
-- src/parser/sax_token_parser_thread.cpp        |  2 +-
-- src/parser/utf8.cpp                           |  2 +-
-- src/parser/utf8_test.cpp                      |  2 +-
-- src/parser/xml_writer_test.cpp                |  2 +-
-- src/python/cell.cpp                           |  2 +-
-- src/python/document.cpp                       |  4 +-
-- src/python/formula_tokens.cpp                 |  2 +-
-- src/python/global.cpp                         |  2 +-
-- src/python/json.cpp                           |  4 +-
-- src/python/named_expression.cpp               |  2 +-
-- src/python/named_expressions.cpp              |  4 +-
-- src/python/sheet.cpp                          |  6 +--
-- src/python/sheet_rows.cpp                     |  2 +-
-- src/spreadsheet/factory_sheet.cpp             | 18 +++----
-- src/spreadsheet/sheet_impl.cpp                |  2 +-
-- 45 files changed, 143 insertions(+), 157 deletions(-)
--
--diff --git a/doc_example/json_parser_1.cpp b/doc_example/json_parser_1.cpp
--index 6fc6de12..832e5176 100644
----- a/doc_example/json_parser_1.cpp
--+++ b/doc_example/json_parser_1.cpp
--@@ -8,12 +8,12 @@ using namespace std;
-- class json_parser_handler : public orcus::json_handler
-- {
-- public:
---    void object_key(const char* p, size_t len, bool transient)
--+    void object_key(const char* p, size_t len, bool /*transient*/)
--     {
--         cout << "object key: " << std::string_view(p, len) << endl;
--     }
-- 
---    void string(const char* p, size_t len, bool transient)
--+    void string(const char* p, size_t len, bool /*transient*/)
--     {
--         cout << "string: " << std::string_view(p, len) << endl;
--     }
--diff --git a/doc_example/spreadsheet_doc_2_sheets_no_string_pool.cpp b/doc_example/spreadsheet_doc_2_sheets_no_string_pool.cpp
--index 63ffacc3..0aa86caf 100644
----- a/doc_example/spreadsheet_doc_2_sheets_no_string_pool.cpp
--+++ b/doc_example/spreadsheet_doc_2_sheets_no_string_pool.cpp
--@@ -64,22 +64,17 @@ public:
--     }
-- 
--     // We don't implement these methods for now.
---    virtual void set_auto(ss::row_t row, ss::col_t col, std::string_view s) override {}
--+    virtual void set_auto(ss::row_t, ss::col_t, std::string_view) override {}
-- 
---    virtual void set_bool(ss::row_t row, ss::col_t col, bool value) override {}
--+    virtual void set_bool(ss::row_t, ss::col_t, bool) override {}
-- 
---    virtual void set_date_time(
---        ss::row_t row, ss::col_t col,
---        int year, int month, int day, int hour, int minute, double second) override {}
--+    virtual void set_date_time(ss::row_t, ss::col_t, int, int, int, int, int, double) override {}
-- 
---    virtual void set_format(ss::row_t row, ss::col_t col, std::size_t xf_index) override {}
--+    virtual void set_format(ss::row_t, ss::col_t, std::size_t) override {}
-- 
---    virtual void set_format(
---        ss::row_t row_start, ss::col_t col_start, ss::row_t row_end, ss::col_t col_end,
---        std::size_t xf_index) override {}
--+    virtual void set_format(ss::row_t, ss::col_t, ss::row_t, ss::col_t, std::size_t) override {}
-- 
---    virtual void fill_down_cells(
---        ss::row_t src_row, ss::col_t src_col, ss::row_t range_size) override {}
--+    virtual void fill_down_cells(ss::row_t, ss::col_t, ss::row_t) override {}
-- };
-- //!code-end: my_sheet
-- 
--@@ -89,14 +84,13 @@ class my_import_factory : public ss::iface::import_factory
--     std::vector<std::unique_ptr<my_sheet>> m_sheets;
-- 
-- public:
---    virtual ss::iface::import_sheet* append_sheet(
---        ss::sheet_t sheet_index, std::string_view name) override
--+    virtual ss::iface::import_sheet* append_sheet(ss::sheet_t, std::string_view) override
--     {
--         m_sheets.push_back(std::make_unique<my_sheet>(m_sheets.size()));
--         return m_sheets.back().get();
--     }
-- 
---    virtual ss::iface::import_sheet* get_sheet(std::string_view name) override
--+    virtual ss::iface::import_sheet* get_sheet(std::string_view) override
--     {
--         // TODO : implement this.
--         return nullptr;
--diff --git a/doc_example/spreadsheet_doc_2_sheets_with_formula.cpp b/doc_example/spreadsheet_doc_2_sheets_with_formula.cpp
--index 1c3f3d5b..11e1932e 100644
----- a/doc_example/spreadsheet_doc_2_sheets_with_formula.cpp
--+++ b/doc_example/spreadsheet_doc_2_sheets_with_formula.cpp
--@@ -87,15 +87,15 @@ public:
--         m_formula.grammar = grammar;
--     }
-- 
---    virtual void set_shared_formula_index(std::size_t index) override {}
--+    virtual void set_shared_formula_index(std::size_t) override {}
-- 
---    virtual void set_result_string(std::string_view value) override {}
--+    virtual void set_result_string(std::string_view) override {}
-- 
---    virtual void set_result_value(double value) override {}
--+    virtual void set_result_value(double) override {}
-- 
--     virtual void set_result_empty() override {}
-- 
---    virtual void set_result_bool(bool value) override {}
--+    virtual void set_result_bool(bool) override {}
-- 
--     virtual void commit() override
--     {
--@@ -154,22 +154,17 @@ public:
--     }
-- 
--     // We don't implement these methods for now.
---    virtual void set_auto(ss::row_t row, ss::col_t col, std::string_view s) override {}
--+    virtual void set_auto(ss::row_t, ss::col_t, std::string_view) override {}
-- 
---    virtual void set_bool(ss::row_t row, ss::col_t col, bool value) override {}
--+    virtual void set_bool(ss::row_t, ss::col_t, bool) override {}
-- 
---    virtual void set_date_time(
---        ss::row_t row, ss::col_t col,
---        int year, int month, int day, int hour, int minute, double second) override {}
--+    virtual void set_date_time(ss::row_t, ss::col_t, int, int, int, int, int, double) override {}
-- 
---    virtual void set_format(ss::row_t row, ss::col_t col, std::size_t xf_index) override {}
--+    virtual void set_format(ss::row_t, ss::col_t, std::size_t) override {}
-- 
---    virtual void set_format(
---        ss::row_t row_start, ss::col_t col_start, ss::row_t row_end, ss::col_t col_end,
---        std::size_t xf_index) override {}
--+    virtual void set_format(ss::row_t, ss::col_t, ss::row_t, ss::col_t, std::size_t) override {}
-- 
---    virtual void fill_down_cells(
---        ss::row_t src_row, ss::col_t src_col, ss::row_t range_size) override {}
--+    virtual void fill_down_cells(ss::row_t, ss::col_t, ss::row_t) override {}
-- 
--     virtual ss::iface::import_formula* get_formula() override
--     {
--@@ -208,21 +203,21 @@ public:
--     }
-- 
--     // The following methods are for formatted text segments, which we ignore for now.
---    virtual void set_segment_bold(bool b) override {}
--+    virtual void set_segment_bold(bool) override {}
-- 
---    virtual void set_segment_font(std::size_t font_index) override {}
--+    virtual void set_segment_font(std::size_t) override {}
-- 
--     virtual void set_segment_font_color(
---        ss::color_elem_t alpha,
---        ss::color_elem_t red,
---        ss::color_elem_t green,
---        ss::color_elem_t blue) override {}
--+        ss::color_elem_t,
--+        ss::color_elem_t,
--+        ss::color_elem_t,
--+        ss::color_elem_t) override {}
-- 
---    virtual void set_segment_font_name(std::string_view s) override {}
--+    virtual void set_segment_font_name(std::string_view) override {}
-- 
---    virtual void set_segment_font_size(double point) override {}
--+    virtual void set_segment_font_size(double) override {}
-- 
---    virtual void set_segment_italic(bool b) override {}
--+    virtual void set_segment_italic(bool) override {}
-- 
--     virtual void append_segment(std::string_view s) override
--     {
--@@ -256,14 +251,14 @@ public:
--         return &m_shared_strings;
--     }
-- 
---    virtual ss::iface::import_sheet* append_sheet(ss::sheet_t sheet_index, std::string_view name) override
--+    virtual ss::iface::import_sheet* append_sheet(ss::sheet_t, std::string_view) override
--     {
--         // Pass the string pool to each sheet instance.
--         m_sheets.push_back(std::make_unique<my_sheet>(m_sheets.size(), m_string_pool));
--         return m_sheets.back().get();
--     }
-- 
---    virtual ss::iface::import_sheet* get_sheet(std::string_view name) override
--+    virtual ss::iface::import_sheet* get_sheet(std::string_view) override
--     {
--         // TODO : implement this.
--         return nullptr;
--diff --git a/doc_example/spreadsheet_doc_2_sheets_with_string_pool.cpp b/doc_example/spreadsheet_doc_2_sheets_with_string_pool.cpp
--index ff69c835..0153dd08 100644
----- a/doc_example/spreadsheet_doc_2_sheets_with_string_pool.cpp
--+++ b/doc_example/spreadsheet_doc_2_sheets_with_string_pool.cpp
--@@ -70,22 +70,17 @@ public:
--     }
-- 
--     // We don't implement these methods for now.
---    virtual void set_auto(ss::row_t row, ss::col_t col, std::string_view s) override {}
--+    virtual void set_auto(ss::row_t, ss::col_t, std::string_view) override {}
-- 
---    virtual void set_bool(ss::row_t row, ss::col_t col, bool value) override {}
--+    virtual void set_bool(ss::row_t, ss::col_t, bool) override {}
-- 
---    virtual void set_date_time(
---        ss::row_t row, ss::col_t col,
---        int year, int month, int day, int hour, int minute, double second) override {}
--+    virtual void set_date_time(ss::row_t, ss::col_t, int, int, int, int, int, double) override {}
-- 
---    virtual void set_format(ss::row_t row, ss::col_t col, std::size_t xf_index) override {}
--+    virtual void set_format(ss::row_t, ss::col_t, std::size_t) override {}
-- 
---    virtual void set_format(
---        ss::row_t row_start, ss::col_t col_start, ss::row_t row_end, ss::col_t col_end,
---        std::size_t xf_index) override {}
--+    virtual void set_format(ss::row_t, ss::col_t, ss::row_t, ss::col_t, std::size_t) override {}
-- 
---    virtual void fill_down_cells(
---        ss::row_t src_row, ss::col_t src_col, ss::row_t range_size) override {}
--+    virtual void fill_down_cells(ss::row_t, ss::col_t, ss::row_t) override {}
-- };
-- 
-- //!code-start: my_shared_strings
--@@ -119,21 +114,21 @@ public:
--     }
-- 
--     // The following methods are for formatted text segments, which we ignore for now.
---    virtual void set_segment_bold(bool b) override {}
--+    virtual void set_segment_bold(bool) override {}
-- 
---    virtual void set_segment_font(std::size_t font_index) override {}
--+    virtual void set_segment_font(std::size_t) override {}
-- 
--     virtual void set_segment_font_color(
---        ss::color_elem_t alpha,
---        ss::color_elem_t red,
---        ss::color_elem_t green,
---        ss::color_elem_t blue) override {}
--+        ss::color_elem_t,
--+        ss::color_elem_t,
--+        ss::color_elem_t,
--+        ss::color_elem_t) override {}
-- 
---    virtual void set_segment_font_name(std::string_view s) override {}
--+    virtual void set_segment_font_name(std::string_view) override {}
-- 
---    virtual void set_segment_font_size(double point) override {}
--+    virtual void set_segment_font_size(double) override {}
-- 
---    virtual void set_segment_italic(bool b) override {}
--+    virtual void set_segment_italic(bool) override {}
-- 
--     virtual void append_segment(std::string_view s) override
--     {
--@@ -169,15 +164,14 @@ public:
--         return &m_shared_strings;
--     }
-- 
---    virtual ss::iface::import_sheet* append_sheet(
---        ss::sheet_t sheet_index, std::string_view name) override
--+    virtual ss::iface::import_sheet* append_sheet(ss::sheet_t, std::string_view) override
--     {
--         // Pass the string pool to each sheet instance.
--         m_sheets.push_back(std::make_unique<my_sheet>(m_sheets.size(), m_string_pool));
--         return m_sheets.back().get();
--     }
-- 
---    virtual ss::iface::import_sheet* get_sheet(std::string_view name) override
--+    virtual ss::iface::import_sheet* get_sheet(std::string_view) override
--     {
--         // TODO : implement this.
--         return nullptr;
--diff --git a/doc_example/xml_mapping_1.cpp b/doc_example/xml_mapping_1.cpp
--index f23d620c..33d6ff22 100644
----- a/doc_example/xml_mapping_1.cpp
--+++ b/doc_example/xml_mapping_1.cpp
--@@ -118,7 +118,7 @@ void run_xmlns_different_ns_same_alias()
--     cout << (alias_1 == alias_2 ? "same" : "different") << endl;
-- }
-- 
---int main(int argc, char** argv)
--+int main()
-- {
--     run_xmlns_example();
--     run_xmlns_stacked();
--diff --git a/src/liborcus/css_document_tree.cpp b/src/liborcus/css_document_tree.cpp
--index 5f84c013..46bf7e91 100644
----- a/src/liborcus/css_document_tree.cpp
--+++ b/src/liborcus/css_document_tree.cpp
--@@ -54,6 +54,9 @@ public:
--     {
-- #if ORCUS_DEBUG_CSS_DOCTREE
--         cout << "@" << string(p, n).c_str();
--+#else
--+        (void)p;
--+        (void)n;
-- #endif
--     }
-- 
--diff --git a/src/liborcus/dom_tree.cpp b/src/liborcus/dom_tree.cpp
--index 51db6ef8..64ecf8ef 100644
----- a/src/liborcus/dom_tree.cpp
--+++ b/src/liborcus/dom_tree.cpp
--@@ -527,7 +527,7 @@ void document_tree::impl::end_element(const sax_ns_parser_element& elem)
--     m_elem_stack.pop_back();
-- }
-- 
---void document_tree::impl::characters(const pstring& val, bool transient)
--+void document_tree::impl::characters(const pstring& val, bool /*transient*/)
-- {
--     if (m_elem_stack.empty())
--         // No root element has been encountered.  Ignore this.
--diff --git a/src/liborcus/gnumeric_cell_context_test.cpp b/src/liborcus/gnumeric_cell_context_test.cpp
--index fc543096..aeec16bd 100644
----- a/src/liborcus/gnumeric_cell_context_test.cpp
--+++ b/src/liborcus/gnumeric_cell_context_test.cpp
--@@ -41,19 +41,19 @@ public:
--         assert(formula == "=arrayFormula");
--     }
-- 
---    virtual void set_result_bool(row_t row, col_t col, bool value) override
--+    virtual void set_result_bool(row_t, col_t, bool) override
--     {
--     }
-- 
---    virtual void set_result_empty(row_t row, col_t col) override
--+    virtual void set_result_empty(row_t, col_t) override
--     {
--     }
-- 
---    virtual void set_result_string(row_t row, col_t col, std::string_view) override
--+    virtual void set_result_string(row_t, col_t, std::string_view) override
--     {
--     }
-- 
---    virtual void set_result_value(row_t row, col_t col, double value) override
--+    virtual void set_result_value(row_t, col_t, double) override
--     {
--     }
-- 
--@@ -77,11 +77,11 @@ public:
--         assert(formula == "=formula");
--     }
-- 
---    virtual void set_shared_formula_index(size_t index) override
--+    virtual void set_shared_formula_index(size_t) override
--     {
--     }
-- 
---    virtual void set_result_bool(bool value) override
--+    virtual void set_result_bool(bool) override
--     {
--     }
-- 
--@@ -93,7 +93,7 @@ public:
--     {
--     }
-- 
---    virtual void set_result_value(double value) override
--+    virtual void set_result_value(double) override
--     {
--     }
-- 
--diff --git a/src/liborcus/json_document_tree.cpp b/src/liborcus/json_document_tree.cpp
--index 4eedea47..c163a364 100644
----- a/src/liborcus/json_document_tree.cpp
--+++ b/src/liborcus/json_document_tree.cpp
--@@ -1217,7 +1217,7 @@ array::array(std::initializer_list<detail::init::node> vs)
-- array::~array() {}
-- 
-- object::object() {}
---object::object(object&& other) {}
--+object::object(object&& /*other*/) {}
-- object::~object() {}
-- 
-- namespace {
--@@ -1388,7 +1388,7 @@ struct node::impl
--         m_value_array(std::move(array.m_vs))
--     {}
-- 
---    impl(json::object obj) :
--+    impl(json::object /*obj*/) :
--         m_type(detail::node_t::object) {}
-- };
-- 
--@@ -1634,7 +1634,7 @@ document_tree::document_tree(array vs) : mp_impl(std::make_unique<impl>())
--     }
-- }
-- 
---document_tree::document_tree(object obj) : mp_impl(std::make_unique<impl>())
--+document_tree::document_tree(object /*obj*/) : mp_impl(std::make_unique<impl>())
-- {
--     mp_impl->m_root = mp_impl->m_res.obj_pool.construct(detail::node_t::object);
--     mp_impl->m_root->value.object = mp_impl->m_res.obj_pool_jvo.construct();
--diff --git a/src/liborcus/json_structure_mapper.cpp b/src/liborcus/json_structure_mapper.cpp
--index 111d1674..09a9e97e 100644
----- a/src/liborcus/json_structure_mapper.cpp
--+++ b/src/liborcus/json_structure_mapper.cpp
--@@ -40,7 +40,7 @@ void structure_mapper::push_range()
--     m_current_range.row_groups.clear();
-- }
-- 
---void structure_mapper::traverse(size_t pos)
--+void structure_mapper::traverse(size_t /*pos*/)
-- {
--     json::structure_tree::node_properties node = m_walker.get_node();
-- 
--diff --git a/src/liborcus/json_structure_tree.cpp b/src/liborcus/json_structure_tree.cpp
--index 5c9d600c..3ae8ecc0 100644
----- a/src/liborcus/json_structure_tree.cpp
--+++ b/src/liborcus/json_structure_tree.cpp
--@@ -235,12 +235,12 @@ struct structure_tree::impl
--         push_value();
--     }
-- 
---    void string(const char* p, size_t len, bool transient)
--+    void string(const char* /*p*/, size_t /*len*/, bool /*transient*/)
--     {
--         push_value();
--     }
-- 
---    void number(double val)
--+    void number(double /*val*/)
--     {
--         push_value();
--     }
--diff --git a/src/liborcus/mock_spreadsheet.cpp b/src/liborcus/mock_spreadsheet.cpp
--index 3bde38ff..4042bdc9 100644
----- a/src/liborcus/mock_spreadsheet.cpp
--+++ b/src/liborcus/mock_spreadsheet.cpp
--@@ -211,22 +211,22 @@ import_formula::~import_formula()
-- {
-- }
-- 
---void import_formula::set_position(row_t row, col_t col)
--+void import_formula::set_position(row_t, col_t)
-- {
--     assert(false);
-- }
-- 
---void import_formula::set_formula(formula_grammar_t grammar, std::string_view)
--+void import_formula::set_formula(formula_grammar_t, std::string_view)
-- {
--     assert(false);
-- }
-- 
---void import_formula::set_shared_formula_index(size_t index)
--+void import_formula::set_shared_formula_index(size_t)
-- {
--     assert(false);
-- }
-- 
---void import_formula::set_result_value(double value)
--+void import_formula::set_result_value(double)
-- {
--     assert(false);
-- }
--@@ -236,7 +236,7 @@ void import_formula::set_result_string(std::string_view)
--     assert(false);
-- }
-- 
---void import_formula::set_result_bool(bool value)
--+void import_formula::set_result_bool(bool)
-- {
--     assert(false);
-- }
--@@ -257,7 +257,7 @@ import_sheet::~import_sheet()
-- {
-- }
-- 
---void import_sheet::set_auto(row_t, col_t, std::string_view s)
--+void import_sheet::set_auto(row_t, col_t, std::string_view)
-- {
--     assert(false);
-- }
--@@ -292,7 +292,7 @@ void import_sheet::set_format(row_t, col_t, row_t, col_t, size_t)
--     assert(false);
-- }
-- 
---void import_sheet::fill_down_cells(row_t src_row, col_t src_col, row_t range_size)
--+void import_sheet::fill_down_cells(row_t, col_t, row_t)
-- {
--     assert(false);
-- }
--diff --git a/src/liborcus/ods_dde_links_context.cpp b/src/liborcus/ods_dde_links_context.cpp
--index db7ab672..783b106f 100644
----- a/src/liborcus/ods_dde_links_context.cpp
--+++ b/src/liborcus/ods_dde_links_context.cpp
--@@ -14,21 +14,21 @@ ods_dde_links_context::ods_dde_links_context(session_context& session_cxt, const
-- 
-- ods_dde_links_context::~ods_dde_links_context() {}
-- 
---bool ods_dde_links_context::can_handle_element(xmlns_id_t ns, xml_token_t name) const
--+bool ods_dde_links_context::can_handle_element(xmlns_id_t /*ns*/, xml_token_t /*name*/) const
-- {
--     return true;
-- }
-- 
---xml_context_base* ods_dde_links_context::create_child_context(xmlns_id_t ns, xml_token_t name)
--+xml_context_base* ods_dde_links_context::create_child_context(xmlns_id_t /*ns*/, xml_token_t /*name*/)
-- {
--     return nullptr;
-- }
-- 
---void ods_dde_links_context::end_child_context(xmlns_id_t ns, xml_token_t name, xml_context_base *child)
--+void ods_dde_links_context::end_child_context(xmlns_id_t /*ns*/, xml_token_t /*name*/, xml_context_base* /*child*/)
-- {
-- }
-- 
---void ods_dde_links_context::start_element(xmlns_id_t ns, xml_token_t name, const::std::vector<xml_token_attr_t> &attrs)
--+void ods_dde_links_context::start_element(xmlns_id_t ns, xml_token_t name, const::std::vector<xml_token_attr_t>& /*attrs*/)
-- {
--     xml_token_pair_t parent = push_stack(ns, name);
--     (void)parent;
--@@ -41,7 +41,7 @@ bool ods_dde_links_context::end_element(xmlns_id_t ns, xml_token_t name)
--     return pop_stack(ns, name);
-- }
-- 
---void ods_dde_links_context::characters(const pstring &str, bool transient)
--+void ods_dde_links_context::characters(const pstring& /*str*/, bool /*transient*/)
-- {
-- }
-- 
--diff --git a/src/liborcus/opc_context.cpp b/src/liborcus/opc_context.cpp
--index ef1a591f..d3cddabd 100644
----- a/src/liborcus/opc_context.cpp
--+++ b/src/liborcus/opc_context.cpp
--@@ -90,17 +90,17 @@ opc_content_types_context::~opc_content_types_context()
-- {
-- }
-- 
---bool opc_content_types_context::can_handle_element(xmlns_id_t ns, xml_token_t name) const
--+bool opc_content_types_context::can_handle_element(xmlns_id_t /*ns*/, xml_token_t /*name*/) const
-- {
--     return true;
-- }
-- 
---xml_context_base* opc_content_types_context::create_child_context(xmlns_id_t ns, xml_token_t name)
--+xml_context_base* opc_content_types_context::create_child_context(xmlns_id_t /*ns*/, xml_token_t /*name*/)
-- {
--     return nullptr;
-- }
-- 
---void opc_content_types_context::end_child_context(xmlns_id_t ns, xml_token_t name, xml_context_base *child)
--+void opc_content_types_context::end_child_context(xmlns_id_t /*ns*/, xml_token_t /*name*/, xml_context_base* /*child*/)
-- {
-- }
-- 
--@@ -153,7 +153,7 @@ bool opc_content_types_context::end_element(xmlns_id_t ns, xml_token_t name)
--     return pop_stack(ns, name);
-- }
-- 
---void opc_content_types_context::characters(const pstring &str, bool transient)
--+void opc_content_types_context::characters(const pstring& /*str*/, bool /*transient*/)
-- {
-- }
-- 
--@@ -256,17 +256,17 @@ opc_relations_context::~opc_relations_context()
-- {
-- }
-- 
---bool opc_relations_context::can_handle_element(xmlns_id_t ns, xml_token_t name) const
--+bool opc_relations_context::can_handle_element(xmlns_id_t /*ns*/, xml_token_t /*name*/) const
-- {
--     return true;
-- }
-- 
---xml_context_base* opc_relations_context::create_child_context(xmlns_id_t ns, xml_token_t name)
--+xml_context_base* opc_relations_context::create_child_context(xmlns_id_t /*ns*/, xml_token_t /*name*/)
-- {
--     return nullptr;
-- }
-- 
---void opc_relations_context::end_child_context(xmlns_id_t ns, xml_token_t name, xml_context_base *child)
--+void opc_relations_context::end_child_context(xmlns_id_t /*ns*/, xml_token_t /*name*/, xml_context_base* /*child*/)
-- {
-- }
-- 
--@@ -302,7 +302,7 @@ bool opc_relations_context::end_element(xmlns_id_t ns, xml_token_t name)
--     return pop_stack(ns, name);
-- }
-- 
---void opc_relations_context::characters(const pstring &str, bool transient)
--+void opc_relations_context::characters(const pstring& /*str*/, bool /*transient*/)
-- {
-- }
-- 
--diff --git a/src/liborcus/orcus_json.cpp b/src/liborcus/orcus_json.cpp
--index 2b5967d5..69672190 100644
----- a/src/liborcus/orcus_json.cpp
--+++ b/src/liborcus/orcus_json.cpp
--@@ -137,7 +137,7 @@ public:
--         push_node(json_map_tree::input_node_type::object);
--     }
-- 
---    void object_key(const char* p, size_t len, bool transient)
--+    void object_key(const char* p, size_t len, bool /*transient*/)
--     {
--         m_walker.set_object_key(p, len);
--     }
--@@ -168,7 +168,7 @@ public:
--         pop_node(json_map_tree::input_node_type::value);
--     }
-- 
---    void string(const char* p, size_t len, bool transient)
--+    void string(const char* p, size_t len, bool /*transient*/)
--     {
--         push_node(json_map_tree::input_node_type::value);
--         commit_value(json_value(p, len));
--diff --git a/src/liborcus/orcus_xml_map_def.cpp b/src/liborcus/orcus_xml_map_def.cpp
--index 4c70e060..889dbcb0 100644
----- a/src/liborcus/orcus_xml_map_def.cpp
--+++ b/src/liborcus/orcus_xml_map_def.cpp
--@@ -43,9 +43,9 @@ public:
--     xml_map_sax_handler(orcus_xml& app) : m_app(app) {}
-- 
--     void doctype(const sax::doctype_declaration&) {}
---    void start_declaration(const pstring& name) {}
--+    void start_declaration(const pstring& /*name*/) {}
-- 
---    void end_declaration(const pstring& name)
--+    void end_declaration(const pstring& /*name*/)
--     {
--         m_attrs.clear();
--     }
--diff --git a/src/liborcus/spreadsheet_interface.cpp b/src/liborcus/spreadsheet_interface.cpp
--index 87103233..985caf45 100644
----- a/src/liborcus/spreadsheet_interface.cpp
--+++ b/src/liborcus/spreadsheet_interface.cpp
--@@ -124,13 +124,13 @@ import_reference_resolver* import_factory::get_reference_resolver(formula_ref_co
-- }
-- 
-- import_pivot_cache_definition* import_factory::create_pivot_cache_definition(
---        orcus::spreadsheet::pivot_cache_id_t cache_id)
--+        orcus::spreadsheet::pivot_cache_id_t /*cache_id*/)
-- {
--     return nullptr;
-- }
-- 
-- import_pivot_cache_records* import_factory::create_pivot_cache_records(
---        orcus::spreadsheet::pivot_cache_id_t cache_id)
--+        orcus::spreadsheet::pivot_cache_id_t /*cache_id*/)
-- {
--     return nullptr;
-- }
--diff --git a/src/liborcus/xls_xml_context.cpp b/src/liborcus/xls_xml_context.cpp
--index f5b8fe26..b2d6d398 100644
----- a/src/liborcus/xls_xml_context.cpp
--+++ b/src/liborcus/xls_xml_context.cpp
--@@ -90,17 +90,17 @@ xls_xml_data_context::xls_xml_data_context(
-- 
-- xls_xml_data_context::~xls_xml_data_context() {}
-- 
---bool xls_xml_data_context::can_handle_element(xmlns_id_t ns, xml_token_t name) const
--+bool xls_xml_data_context::can_handle_element(xmlns_id_t /*ns*/, xml_token_t /*name*/) const
-- {
--     return true;
-- }
-- 
---xml_context_base* xls_xml_data_context::create_child_context(xmlns_id_t ns, xml_token_t name)
--+xml_context_base* xls_xml_data_context::create_child_context(xmlns_id_t /*ns*/, xml_token_t /*name*/)
-- {
--     return nullptr;
-- }
-- 
---void xls_xml_data_context::end_child_context(xmlns_id_t ns, xml_token_t name, xml_context_base* child)
--+void xls_xml_data_context::end_child_context(xmlns_id_t /*ns*/, xml_token_t /*name*/, xml_context_base* /*child*/)
-- {
-- }
-- 
--@@ -254,7 +254,7 @@ void xls_xml_data_context::reset()
-- }
-- 
-- void xls_xml_data_context::start_element_data(
---    const xml_token_pair_t& parent, const xml_attrs_t& attrs)
--+    const xml_token_pair_t& /*parent*/, const xml_attrs_t& attrs)
-- {
--     m_cell_type = ct_unknown;
--     m_cell_string.clear();
--@@ -776,7 +776,7 @@ xml_context_base* xls_xml_context::create_child_context(xmlns_id_t ns, xml_token
--     return nullptr;
-- }
-- 
---void xls_xml_context::end_child_context(xmlns_id_t ns, xml_token_t name, xml_context_base* child)
--+void xls_xml_context::end_child_context(xmlns_id_t /*ns*/, xml_token_t /*name*/, xml_context_base* /*child*/)
-- {
-- }
-- 
--@@ -1217,7 +1217,7 @@ void xls_xml_context::characters(const pstring& str, bool /*transient*/)
--     }
-- }
-- 
---void xls_xml_context::start_element_borders(const xml_token_pair_t& parent, const xml_attrs_t& attrs)
--+void xls_xml_context::start_element_borders(const xml_token_pair_t& parent, const xml_attrs_t& /*attrs*/)
-- {
--     xml_element_expected(parent, NS_xls_xml_ss, XML_Style);
--     m_current_style->borders.clear();
--diff --git a/src/liborcus/xls_xml_detection_handler.cpp b/src/liborcus/xls_xml_detection_handler.cpp
--index aaa1b148..2b18c8ee 100644
----- a/src/liborcus/xls_xml_detection_handler.cpp
--+++ b/src/liborcus/xls_xml_detection_handler.cpp
--@@ -36,7 +36,7 @@ public:
--         return nullptr;
--     }
-- 
---    virtual void start_element(xmlns_id_t ns, xml_token_t name, const::std::vector<xml_token_attr_t>& attrs)
--+    virtual void start_element(xmlns_id_t ns, xml_token_t name, const::std::vector<xml_token_attr_t>& /*attrs*/)
--     {
--         xml_token_pair_t parent = push_stack(ns, name);
--         if (ns == NS_xls_xml_ss)
--diff --git a/src/liborcus/xlsx_drawing_context.cpp b/src/liborcus/xlsx_drawing_context.cpp
--index f7dc31ab..380d7852 100644
----- a/src/liborcus/xlsx_drawing_context.cpp
--+++ b/src/liborcus/xlsx_drawing_context.cpp
--@@ -41,7 +41,7 @@ void xlsx_drawing_context::end_child_context(xmlns_id_t /*ns*/, xml_token_t /*na
-- {
-- }
-- 
---void xlsx_drawing_context::start_element(xmlns_id_t ns, xml_token_t name, const::std::vector<xml_token_attr_t>& attrs)
--+void xlsx_drawing_context::start_element(xmlns_id_t ns, xml_token_t name, const::std::vector<xml_token_attr_t>& /*attrs*/)
-- {
--     xml_token_pair_t parent = push_stack(ns, name);
-- 
--diff --git a/src/liborcus/xlsx_sheet_context.cpp b/src/liborcus/xlsx_sheet_context.cpp
--index 669f604f..50018c32 100644
----- a/src/liborcus/xlsx_sheet_context.cpp
--+++ b/src/liborcus/xlsx_sheet_context.cpp
--@@ -845,7 +845,7 @@ void xlsx_sheet_context::push_raw_cell_value()
-- }
-- 
-- void xlsx_sheet_context::push_raw_cell_result(
---    range_formula_results& res, size_t row_offset, size_t col_offset, xlsx_session_data& session_data) const
--+    range_formula_results& res, size_t row_offset, size_t col_offset, xlsx_session_data& /*session_data*/) const
-- {
--     if (m_cur_value.empty())
--         return;
--diff --git a/src/liborcus/xlsx_sheet_context_test.cpp b/src/liborcus/xlsx_sheet_context_test.cpp
--index 9cb0d2a5..11ec8b71 100644
----- a/src/liborcus/xlsx_sheet_context_test.cpp
--+++ b/src/liborcus/xlsx_sheet_context_test.cpp
--@@ -64,19 +64,19 @@ public:
--         assert(formula == "A1:A2");
--     }
-- 
---    virtual void set_result_bool(row_t row, col_t col, bool value) override
--+    virtual void set_result_bool(row_t, col_t, bool) override
--     {
--     }
-- 
---    virtual void set_result_empty(row_t row, col_t col) override
--+    virtual void set_result_empty(row_t, col_t) override
--     {
--     }
-- 
---    virtual void set_result_string(row_t row, col_t col, std::string_view) override
--+    virtual void set_result_string(row_t, col_t, std::string_view) override
--     {
--     }
-- 
---    virtual void set_result_value(row_t row, col_t col, double value) override
--+    virtual void set_result_value(row_t, col_t, double) override
--     {
--     }
-- 
--diff --git a/src/liborcus/xlsx_table_context.cpp b/src/liborcus/xlsx_table_context.cpp
--index e135f44d..d8c360df 100644
----- a/src/liborcus/xlsx_table_context.cpp
--+++ b/src/liborcus/xlsx_table_context.cpp
--@@ -317,7 +317,7 @@ bool xlsx_table_context::end_element(xmlns_id_t ns, xml_token_t name)
--     return pop_stack(ns, name);
-- }
-- 
---void xlsx_table_context::characters(const pstring& str, bool transient)
--+void xlsx_table_context::characters(const pstring& /*str*/, bool /*transient*/)
-- {
-- }
-- 
--diff --git a/src/liborcus/xml_structure_tree.cpp b/src/liborcus/xml_structure_tree.cpp
--index 9eaf3c07..5185049e 100644
----- a/src/liborcus/xml_structure_tree.cpp
--+++ b/src/liborcus/xml_structure_tree.cpp
--@@ -125,11 +125,11 @@ public:
-- 
--     void doctype(const sax::doctype_declaration&) {}
-- 
---    void start_declaration(const pstring& name)
--+    void start_declaration(const pstring& /*name*/)
--     {
--     }
-- 
---    void end_declaration(const pstring& name)
--+    void end_declaration(const pstring& /*name*/)
--     {
--         m_attrs.clear();
--     }
--@@ -185,7 +185,7 @@ public:
--         m_stack.push_back(ref);
--     }
-- 
---    void end_element(const sax_ns_parser_element& elem)
--+    void end_element(const sax_ns_parser_element& /*elem*/)
--     {
--         if (m_stack.empty())
--             throw general_error("Element stack is empty.");
--diff --git a/src/liborcus/xpath_parser_test.cpp b/src/liborcus/xpath_parser_test.cpp
--index 12242f62..f67c0dc6 100644
----- a/src/liborcus/xpath_parser_test.cpp
--+++ b/src/liborcus/xpath_parser_test.cpp
--@@ -64,7 +64,7 @@ void test_attributes()
--     assert(token.attribute);
-- }
-- 
---int main(int argc, char** argv)
--+int main()
-- {
--     test_elements();
--     test_attributes();
--diff --git a/src/orcus_env_dump.cpp b/src/orcus_env_dump.cpp
--index ad60927a..99f53718 100644
----- a/src/orcus_env_dump.cpp
--+++ b/src/orcus_env_dump.cpp
--@@ -13,7 +13,7 @@
-- using std::cout;
-- using std::endl;
-- 
---int main(int argc, char** argv)
--+int main()
-- {
--     cout << "CPU flags:" << endl;
--     cout << "  SSE 4.2: " << orcus::detail::cpu::has_sse42() << endl;
--diff --git a/src/orcus_test_json_mapped.cpp b/src/orcus_test_json_mapped.cpp
--index ed10a842..c504e156 100644
----- a/src/orcus_test_json_mapped.cpp
--+++ b/src/orcus_test_json_mapped.cpp
--@@ -88,7 +88,7 @@ void test_invalid_map_definition()
--     }
-- }
-- 
---int main(int argc, char** argv)
--+int main()
-- {
--     test_mapped_json_import();
--     test_invalid_map_definition();
--diff --git a/src/orcus_test_xml.cpp b/src/orcus_test_xml.cpp
--index 2a44a8ac..de5197cf 100644
----- a/src/orcus_test_xml.cpp
--+++ b/src/orcus_test_xml.cpp
--@@ -85,7 +85,7 @@ const char* sax_parser_parse_only_test_dirs[] = {
--     SRCDIR"/test/xml/parse-only/rss/"
-- };
-- 
---void parse_file(dom::document_tree& tree, const char* filepath, string& strm)
--+void parse_file(dom::document_tree& tree, const char* filepath, std::string& /*strm*/)
-- {
--     cout << "testing " << filepath << endl;
--     file_content content(filepath);
--diff --git a/src/orcus_test_xml_mapped.cpp b/src/orcus_test_xml_mapped.cpp
--index b90ea020..8e18cfda 100644
----- a/src/orcus_test_xml_mapped.cpp
--+++ b/src/orcus_test_xml_mapped.cpp
--@@ -66,7 +66,7 @@ void test_mapped_xml_import()
--         { SRCDIR"/test/xml-mapped/nested-repeats-4", false },
--     };
-- 
---    auto dump_xml_structure = [](string& dump_content, string& strm, const char* filepath, xmlns_context& cxt)
--+    auto dump_xml_structure = [](std::string& dump_content, std::string& /*strm*/, const char* filepath, xmlns_context& cxt)
--     {
--         file_content content(filepath);
--         dom::document_tree tree(cxt);
--diff --git a/src/parser/sax_token_parser_test.cpp b/src/parser/sax_token_parser_test.cpp
--index 2647444c..6ff8c932 100644
----- a/src/parser/sax_token_parser_test.cpp
--+++ b/src/parser/sax_token_parser_test.cpp
--@@ -146,7 +146,7 @@ void test_unicode_string()
--         {
--         }
-- 
---        void characters(std::string_view val, bool transient)
--+        void characters(std::string_view val, bool /*transient*/)
--         {
--             std::cout << "charachters:" << std::endl;
--             std::cout << val << std::endl;
--diff --git a/src/parser/sax_token_parser_thread.cpp b/src/parser/sax_token_parser_thread.cpp
--index b9166e3c..d21ae6d7 100644
----- a/src/parser/sax_token_parser_thread.cpp
--+++ b/src/parser/sax_token_parser_thread.cpp
--@@ -86,7 +86,7 @@ struct parser_thread::impl
--         m_token_buffer.abort();
--     }
-- 
---    void declaration(const orcus::xml_declaration_t& decl)
--+    void declaration(const orcus::xml_declaration_t& /*decl*/)
--     {
--     }
-- 
--diff --git a/src/parser/utf8.cpp b/src/parser/utf8.cpp
--index f3b264a7..e02d2244 100644
----- a/src/parser/utf8.cpp
--+++ b/src/parser/utf8.cpp
--@@ -231,7 +231,7 @@ bool parse_3b_second_char(uint8_t c1, uint8_t c2, uint8_t c3)
-- }
-- 
-- // [#x10000-#xEFFFF]:  F0 90 80 80 -> F3 AF BF BF
---bool parse_4b_char(uint8_t c1, uint8_t c2, uint8_t c3, uint8_t c4)
--+bool parse_4b_char(uint8_t c1, uint8_t c2, uint8_t /*c3*/, uint8_t /*c4*/)
-- {
--     // F0 90 80 80 -> F3 AF BF BF
--     //  - F0 90 xx xx -> F0 xx xx xx
--diff --git a/src/parser/utf8_test.cpp b/src/parser/utf8_test.cpp
--index 78b7656a..88dcd3e8 100644
----- a/src/parser/utf8_test.cpp
--+++ b/src/parser/utf8_test.cpp
--@@ -159,7 +159,7 @@ void test_xml_name_char()
--     assert(res);
-- }
-- 
---int main(int argc, char** argv)
--+int main()
-- {
--     test_xml_name_start_char();
--     test_xml_name_char();
--diff --git a/src/parser/xml_writer_test.cpp b/src/parser/xml_writer_test.cpp
--index e5a22357..8687db32 100644
----- a/src/parser/xml_writer_test.cpp
--+++ b/src/parser/xml_writer_test.cpp
--@@ -28,7 +28,7 @@ void test_encoded_content()
--     {
--         std::ostringstream os_content;
-- 
---        void characters(std::string_view val, bool transient)
--+        void characters(std::string_view val, bool /*transient*/)
--         {
--             os_content << val;
--         }
--diff --git a/src/python/cell.cpp b/src/python/cell.cpp
--index 536b5c4d..16374b8f 100644
----- a/src/python/cell.cpp
--+++ b/src/python/cell.cpp
--@@ -115,7 +115,7 @@ int tp_init(pyobj_cell* self, PyObject* args, PyObject* kwargs)
--     return 0;
-- }
-- 
---PyObject* cell_get_formula_tokens(PyObject* self, PyObject* args, PyObject* kwargs)
--+PyObject* cell_get_formula_tokens(PyObject* self, PyObject* /*args*/, PyObject* /*kwargs*/)
-- {
--     pyobj_cell* obj = reinterpret_cast<pyobj_cell*>(self);
--     cell_data& data = *obj->data;
--diff --git a/src/python/document.cpp b/src/python/document.cpp
--index b06463bc..02a2dc49 100644
----- a/src/python/document.cpp
--+++ b/src/python/document.cpp
--@@ -69,12 +69,12 @@ PyObject* tp_new(PyTypeObject* type, PyObject* /*args*/, PyObject* /*kwargs*/)
--     return reinterpret_cast<PyObject*>(self);
-- }
-- 
---int tp_init(pyobj_document* self, PyObject* /*args*/, PyObject* /*kwargs*/)
--+int tp_init(pyobj_document* /*self*/, PyObject* /*args*/, PyObject* /*kwargs*/)
-- {
--     return 0;
-- }
-- 
---PyObject* doc_get_named_expressions(PyObject* self, PyObject* args, PyObject* kwargs)
--+PyObject* doc_get_named_expressions(PyObject* self, PyObject* /*args*/, PyObject* /*kwargs*/)
-- {
--     const ss::document& doc = *t(self)->data->m_doc;
--     const ixion::model_context& cxt = doc.get_model_context();
--diff --git a/src/python/formula_tokens.cpp b/src/python/formula_tokens.cpp
--index 569d1a7a..3eece2d4 100644
----- a/src/python/formula_tokens.cpp
--+++ b/src/python/formula_tokens.cpp
--@@ -56,7 +56,7 @@ void tp_dealloc(pyobj_formula_tokens* self)
--     Py_TYPE(self)->tp_free(reinterpret_cast<PyObject*>(self));
-- }
-- 
---int tp_init(pyobj_formula_tokens* self, PyObject* /*args*/, PyObject* /*kwargs*/)
--+int tp_init(pyobj_formula_tokens* /*self*/, PyObject* /*args*/, PyObject* /*kwargs*/)
-- {
--     return 0;
-- }
--diff --git a/src/python/global.cpp b/src/python/global.cpp
--index 7a21f960..f8623e0d 100644
----- a/src/python/global.cpp
--+++ b/src/python/global.cpp
--@@ -16,7 +16,7 @@ void set_python_exception(PyObject* type, const std::exception& e)
-- {
--     std::ostringstream os;
--     os << "C++ exception caught: " << e.what();
---    PyErr_SetString(PyExc_RuntimeError, os.str().data());
--+    PyErr_SetString(type, os.str().data());
-- }
-- 
-- PyObject* get_python_enum_value(const char* enum_class_name, const char* value_name)
--diff --git a/src/python/json.cpp b/src/python/json.cpp
--index fdeea10c..f22cf666 100644
----- a/src/python/json.cpp
--+++ b/src/python/json.cpp
--@@ -177,7 +177,7 @@ public:
--         }
--     }
-- 
---    void object_key(const char* p, size_t len, bool transient)
--+    void object_key(const char* p, size_t len, bool /*transient*/)
--     {
--         parser_stack& cur = m_stack.back();
--         cur.key = PyUnicode_FromStringAndSize(p, len);
--@@ -213,7 +213,7 @@ public:
--         push_value(Py_None);
--     }
-- 
---    void string(const char* p, size_t len, bool transient)
--+    void string(const char* p, size_t len, bool /*transient*/)
--     {
--         push_value(PyUnicode_FromStringAndSize(p, len));
--     }
--diff --git a/src/python/named_expression.cpp b/src/python/named_expression.cpp
--index 8edeeacf..1402daa0 100644
----- a/src/python/named_expression.cpp
--+++ b/src/python/named_expression.cpp
--@@ -81,7 +81,7 @@ PyObject* tp_new(PyTypeObject* type, PyObject* /*args*/, PyObject* /*kwargs*/)
--     return reinterpret_cast<PyObject*>(self);
-- }
-- 
---PyObject* ne_get_formula_tokens(PyObject* self, PyObject* args, PyObject* kwargs)
--+PyObject* ne_get_formula_tokens(PyObject* self, PyObject* /*args*/, PyObject* /*kwargs*/)
-- {
--     named_exp_data& data = *t(self)->data;
--     if (!data.tokens)
--diff --git a/src/python/named_expressions.cpp b/src/python/named_expressions.cpp
--index 235389ac..6faffee5 100644
----- a/src/python/named_expressions.cpp
--+++ b/src/python/named_expressions.cpp
--@@ -44,7 +44,7 @@ inline pyobj_named_exps* t(PyObject* self)
--     return reinterpret_cast<pyobj_named_exps*>(self);
-- }
-- 
---PyObject* named_exps_names(PyObject* self, PyObject* args, PyObject* kwargs)
--+PyObject* named_exps_names(PyObject* self, PyObject* /*args*/, PyObject* /*kwargs*/)
-- {
--     named_exps_data& data = *t(self)->data;
--     PyObject* s = PySet_New(nullptr);
--@@ -64,7 +64,7 @@ void tp_dealloc(pyobj_named_exps* self)
--     Py_TYPE(self)->tp_free(reinterpret_cast<PyObject*>(self));
-- }
-- 
---int tp_init(pyobj_named_exps* self, PyObject* /*args*/, PyObject* /*kwargs*/)
--+int tp_init(pyobj_named_exps* /*self*/, PyObject* /*args*/, PyObject* /*kwargs*/)
-- {
--     return 0;
-- }
--diff --git a/src/python/sheet.cpp b/src/python/sheet.cpp
--index 0ccc39bd..38b96241 100644
----- a/src/python/sheet.cpp
--+++ b/src/python/sheet.cpp
--@@ -85,12 +85,12 @@ PyObject* tp_new(PyTypeObject* type, PyObject* /*args*/, PyObject* /*kwargs*/)
--     return reinterpret_cast<PyObject*>(self);
-- }
-- 
---int tp_init(pyobj_sheet* self, PyObject* /*args*/, PyObject* /*kwargs*/)
--+int tp_init(pyobj_sheet* /*self*/, PyObject* /*args*/, PyObject* /*kwargs*/)
-- {
--     return 0;
-- }
-- 
---PyObject* sheet_get_rows(PyObject* self, PyObject* args, PyObject* kwargs)
--+PyObject* sheet_get_rows(PyObject* self, PyObject* /*args*/, PyObject* /*kwargs*/)
-- {
--     PyTypeObject* sr_type = get_sheet_rows_type();
-- 
--@@ -210,7 +210,7 @@ PyObject* sheet_write(PyObject* self, PyObject* args, PyObject* kwargs)
--     return Py_None;
-- }
-- 
---PyObject* sheet_get_named_expressions(PyObject* self, PyObject* args, PyObject* kwargs)
--+PyObject* sheet_get_named_expressions(PyObject* self, PyObject* /*args*/, PyObject* /*kwargs*/)
-- {
--     const ss::document& doc = *t(self)->data->m_doc;
--     ss::sheet_t si = t(self)->data->m_sheet->get_index();
--diff --git a/src/python/sheet_rows.cpp b/src/python/sheet_rows.cpp
--index 7fa869ea..be495894 100644
----- a/src/python/sheet_rows.cpp
--+++ b/src/python/sheet_rows.cpp
--@@ -49,7 +49,7 @@ PyObject* sheet_rows_new(PyTypeObject* type, PyObject* /*args*/, PyObject* /*kwa
--     return reinterpret_cast<PyObject*>(self);
-- }
-- 
---int sheet_rows_init(pyobj_sheet_rows* self, PyObject* /*args*/, PyObject* /*kwargs*/)
--+int sheet_rows_init(pyobj_sheet_rows* /*self*/, PyObject* /*args*/, PyObject* /*kwargs*/)
-- {
--     return 0;
-- }
--diff --git a/src/spreadsheet/factory_sheet.cpp b/src/spreadsheet/factory_sheet.cpp
--index 3e04295c..61541174 100644
----- a/src/spreadsheet/factory_sheet.cpp
--+++ b/src/spreadsheet/factory_sheet.cpp
--@@ -74,19 +74,19 @@ void import_data_table::reset()
-- {
-- }
-- 
---void import_data_table::set_type(data_table_type_t type)
--+void import_data_table::set_type(data_table_type_t /*type*/)
-- {
-- }
-- 
---void import_data_table::set_range(const range_t& range)
--+void import_data_table::set_range(const range_t& /*range*/)
-- {
-- }
-- 
---void import_data_table::set_first_reference(std::string_view ref, bool deleted)
--+void import_data_table::set_first_reference(std::string_view /*ref*/, bool /*deleted*/)
-- {
-- }
-- 
---void import_data_table::set_second_reference(std::string_view ref, bool deleted)
--+void import_data_table::set_second_reference(std::string_view /*ref*/, bool /*deleted*/)
-- {
-- }
-- 
--@@ -193,7 +193,7 @@ void import_array_formula::set_range(const range_t& range)
--     }
-- }
-- 
---void import_array_formula::set_formula(formula_grammar_t grammar, std::string_view formula)
--+void import_array_formula::set_formula(formula_grammar_t /*grammar*/, std::string_view formula)
-- {
--     const ixion::formula_name_resolver* resolver =
--         m_doc.get_formula_name_resolver(spreadsheet::formula_ref_context_t::global);
--@@ -223,12 +223,12 @@ void import_array_formula::set_result_value(row_t row, col_t col, double value)
--     m_result_mtx.set(row, col, value);
-- }
-- 
---void import_array_formula::set_result_string(row_t row, col_t col, std::string_view value)
--+void import_array_formula::set_result_string(row_t /*row*/, col_t /*col*/, std::string_view /*value*/)
-- {
--     // TODO : handle this
-- }
-- 
---void import_array_formula::set_result_empty(row_t row, col_t col)
--+void import_array_formula::set_result_empty(row_t /*row*/, col_t /*col*/)
-- {
--     // TODO : handle this
-- }
--@@ -282,7 +282,7 @@ void import_formula::set_position(row_t row, col_t col)
--     m_col = col;
-- }
-- 
---void import_formula::set_formula(formula_grammar_t grammar, std::string_view formula)
--+void import_formula::set_formula(formula_grammar_t /*grammar*/, std::string_view formula)
-- {
--     if (m_row < 0 || m_col < 0)
--         return;
--@@ -331,7 +331,7 @@ void import_formula::set_result_string(std::string_view value)
-- }
-- 
-- void import_formula::set_result_empty() {}
---void import_formula::set_result_bool(bool value) {}
--+void import_formula::set_result_bool(bool /*value*/) {}
-- 
-- void import_formula::commit()
-- {
--diff --git a/src/spreadsheet/sheet_impl.cpp b/src/spreadsheet/sheet_impl.cpp
--index 72e521c5..c2e7ecb6 100644
----- a/src/spreadsheet/sheet_impl.cpp
--+++ b/src/spreadsheet/sheet_impl.cpp
--@@ -12,7 +12,7 @@
-- 
-- namespace orcus { namespace spreadsheet {
-- 
---sheet_impl::sheet_impl(document& doc, sheet& sh, sheet_t sheet_index) :
--+sheet_impl::sheet_impl(document& doc, sheet& /*sh*/, sheet_t sheet_index) :
--     m_doc(doc),
--     m_col_widths(0, m_doc.get_sheet_size().columns, get_default_column_width()),
--     m_row_heights(0, m_doc.get_sheet_size().rows, get_default_row_height()),
---- 
--2.25.1
--
-diff --git a/external/liborcus/unused-variables.patch.1 b/external/liborcus/unused-variables.patch.1
-deleted file mode 100644
-index 77b88fae288c..000000000000
---- a/external/liborcus/unused-variables.patch.1
-+++ /dev/null
-@@ -1,24 +0,0 @@
--From 5fccafa297ce2439ee850e13ccbeea3edb1750af Mon Sep 17 00:00:00 2001
--From: Kohei Yoshida <kohei.yoshida@gmail.com>
--Date: Tue, 2 Nov 2021 20:42:45 -0400
--Subject: [PATCH] Unused variables.
--
-----
-- include/orcus/sax_parser.hpp | 1 -
-- 1 file changed, 1 deletion(-)
--
--diff --git a/include/orcus/sax_parser.hpp b/include/orcus/sax_parser.hpp
--index 24b1e8ea..15e8d917 100644
----- a/include/orcus/sax_parser.hpp
--+++ b/include/orcus/sax_parser.hpp
--@@ -539,7 +539,6 @@ template<typename _Handler, typename _Config>
-- void sax_parser<_Handler,_Config>::attribute()
-- {
--     sax::parser_attribute attr;
---    std::string_view attr_ns_name, attr_name, attr_value;
--     attribute_name(attr.ns, attr.name);
-- 
-- #if ORCUS_DEBUG_SAX_PARSER
---- 
--2.25.1
--
-diff --git a/external/liborcus/windows-constants-hack.patch b/external/liborcus/windows-constants-hack.patch
-index 51aabfa1fb47..e86c74a722f3 100644
---- a/external/liborcus/windows-constants-hack.patch
-+++ b/external/liborcus/windows-constants-hack.patch
-@@ -8,8 +8,8 @@ index ae571f5..539ce18 100644
-  
- -#include "constants.inl"
- +#define ORCUS_MAJOR_VERSION 0
--+#define ORCUS_MINOR_VERSION 16
--+#define ORCUS_MICRO_VERSION 0
-++#define ORCUS_MINOR_VERSION 17
-++#define ORCUS_MICRO_VERSION 2
-  
-  namespace orcus {
-  
-diff --git a/sc/source/filter/orcus/interface.cxx b/sc/source/filter/orcus/interface.cxx
-index 674c2cfe7c8f..f5f2fd8a11c0 100644
---- a/sc/source/filter/orcus/interface.cxx
-+++ b/sc/source/filter/orcus/interface.cxx
-@@ -1725,16 +1725,15 @@ void ScOrcusStyles::set_font_underline_color(orcus::spreadsheet::color_elem_t al
-             orcus::spreadsheet::color_elem_t green,
-             orcus::spreadsheet::color_elem_t blue)
- {
--    maCurrentFont.maUnderlineColor = Color(ColorTransparency, alpha, red, green, blue);
-+    maCurrentFont.maUnderlineColor = Color(ColorAlpha, alpha, red, green, blue);
- }
- 
--void ScOrcusStyles::set_font_color(orcus::spreadsheet::color_elem_t /*alpha*/,
-+void ScOrcusStyles::set_font_color(orcus::spreadsheet::color_elem_t alpha,
-             orcus::spreadsheet::color_elem_t red,
-             orcus::spreadsheet::color_elem_t green,
-             orcus::spreadsheet::color_elem_t blue)
- {
--    // Ignore the alpha value for now.
--    maCurrentFont.maColor = Color(red, green, blue);
-+    maCurrentFont.maColor = Color(ColorAlpha, alpha, red, green, blue);
-     maCurrentFont.mbHasFontAttr = true;
- }
- 
--- 
-cgit v1.2.1
-
diff --git a/extra/libreoffice-still/poppler-22.03.0.patch b/extra/libreoffice-still/poppler-22.03.0.patch
deleted file mode 100644
index c6544b257..000000000
--- a/extra/libreoffice-still/poppler-22.03.0.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-diff --git a/sdext/source/pdfimport/xpdfwrapper/wrapper_gpl.cxx b/sdext/source/pdfimport/xpdfwrapper/wrapper_gpl.cxx
-index ad6320139..e5f6d9c68 100644
---- a/sdext/source/pdfimport/xpdfwrapper/wrapper_gpl.cxx
-+++ b/sdext/source/pdfimport/xpdfwrapper/wrapper_gpl.cxx
-@@ -138,6 +138,15 @@ int main(int argc, char **argv)
-     _setmode( _fileno( g_binary_out ), _O_BINARY );
- #endif
- 
-+#if POPPLER_CHECK_VERSION(22, 3, 0)
-+    PDFDoc aDoc( std::make_unique<GooString>(pFileName),
-+                 GooString(pOwnerPasswordStr),
-+                 GooString(pUserPasswordStr) );
-+
-+    PDFDoc aErrDoc( std::make_unique<GooString>(pErrFileName),
-+                 GooString(pOwnerPasswordStr),
-+                 GooString(pUserPasswordStr) );
-+#else
-     PDFDoc aDoc( pFileName,
-                  pOwnerPasswordStr,
-                  pUserPasswordStr );
-@@ -145,6 +154,7 @@ int main(int argc, char **argv)
-     PDFDoc aErrDoc( pErrFileName,
-                  pOwnerPasswordStr,
-                  pUserPasswordStr );
-+#endif
- 
-     // Check various permissions for aDoc.
-     PDFDoc &rDoc = aDoc.isOk()? aDoc: aErrDoc;
diff --git a/extra/libreoffice-still/poppler-22.04.0.patch b/extra/libreoffice-still/poppler-22.04.0.patch
deleted file mode 100644
index 9a0449038..000000000
--- a/extra/libreoffice-still/poppler-22.04.0.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-# Patch from FreeBSD (https://cgit.freebsd.org/ports/commit/?id=d9b5ef800dbd)
-
---- sdext/source/pdfimport/xpdfwrapper/pdfioutdev_gpl.cxx.orig	2022-04-26 16:11:01 UTC
-+++ sdext/source/pdfimport/xpdfwrapper/pdfioutdev_gpl.cxx
-@@ -474,11 +474,17 @@ int PDFOutDev::parseFont( long long nNewId, GfxFont* g
-     {
-         // TODO(P3): Unfortunately, need to read stream twice, since
-         // we must write byte count to stdout before
-+#if !POPPLER_CHECK_VERSION(22, 3, 0)
-         char* pBuf = gfxFont->readEmbFontFile( m_pDoc->getXRef(), &nSize );
-+#else
-+        std::optional<std::vector<unsigned char>> pBuf = gfxFont->readEmbFontFile( m_pDoc->getXRef() );
-+#endif
-         if( pBuf )
-         {
-             aNewFont.isEmbedded = true;
-+#if !POPPLER_CHECK_VERSION(22, 3, 0)
-             gfree(pBuf);
-+#endif
-         }
-     }
- 
-@@ -492,21 +498,32 @@ void PDFOutDev::writeFontFile( GfxFont* gfxFont ) cons
-         return;
- 
-     int nSize = 0;
--    char* pBuf = gfxFont->readEmbFontFile( m_pDoc->getXRef(), &nSize );
-+#if !POPPLER_CHECK_VERSION(22, 3, 0)
-+        char* pBuf = gfxFont->readEmbFontFile( m_pDoc->getXRef(), &nSize );
-+#else
-+        std::optional<std::vector<unsigned char>> pBuf = gfxFont->readEmbFontFile( m_pDoc->getXRef() );
-+#endif
-     if( !pBuf )
-         return;
- 
-     // ---sync point--- see SYNC STREAMS above
-     fflush(stdout);
--
-+#if !POPPLER_CHECK_VERSION(22, 3, 0)
-     if( fwrite(pBuf, sizeof(char), nSize, g_binary_out) != static_cast<size_t>(nSize) )
-+#else
-+    if( fwrite(reinterpret_cast<char*>(pBuf.value().data()), sizeof(char), nSize, g_binary_out) != static_cast<size_t>(nSize) )
-+#endif
-     {
--        gfree(pBuf);
-+#if !POPPLER_CHECK_VERSION(22, 3, 0)
-+            gfree(pBuf);
-+#endif
-         exit(1); // error
-     }
-     // ---sync point--- see SYNC STREAMS above
-     fflush(g_binary_out);
--    gfree(pBuf);
-+#if !POPPLER_CHECK_VERSION(22, 3, 0)
-+            gfree(pBuf);
-+#endif
- }
- 
- #if POPPLER_CHECK_VERSION(0, 83, 0)
-@@ -759,7 +776,11 @@ void PDFOutDev::updateFont(GfxState *state)
- {
-     assert(state);
- 
-+#if !POPPLER_CHECK_VERSION(22, 3, 0)
-     GfxFont *gfxFont = state->getFont();
-+#else
-+    GfxFont *gfxFont = state->getFont().get();
-+#endif
-     if( !gfxFont )
-         return;
-