Upgrade mdds and liborcus to 2.0.0 and 0.17.0, respectively.
authorKohei Yoshida <kohei@libreoffice.org>
Mon, 1 Nov 2021 18:01:22 +0000 (14:01 -0400)
committerPeter Michael Green <plugwash@raspbian.org>
Thu, 13 Jan 2022 22:04:21 +0000 (22:04 +0000)
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>
Gbp-Pq: Name mdds-2.0-and-orcus-0.17.diff

30 files changed:
RepositoryExternal.mk
configure.ac
cui/source/dialogs/AdditionsDialog.cxx
download.lst
external/liborcus/ExternalPackage_liborcus.mk
external/liborcus/ExternalProject_liborcus.mk
external/liborcus/Library_orcus-parser.mk
external/liborcus/Library_orcus.mk
external/liborcus/UnpackedTarball_liborcus.mk
external/liborcus/allow-utf-8-in-xml-names.patch [deleted file]
external/liborcus/inc/pch/precompiled_orcus-parser.hxx
external/liborcus/inc/pch/precompiled_orcus.hxx
external/liborcus/include.patch.0 [deleted file]
external/liborcus/std-get-busted.patch.1 [new file with mode: 0644]
external/liborcus/windows-constants-hack.patch
external/mdds/UnpackedTarball_mdds.mk
external/mdds/Wunused-but-set-variable.patch [deleted file]
external/mdds/remove-more-unused-parameters.patch.1 [new file with mode: 0644]
external/mdds/remove-unused-parameters.patch.1 [new file with mode: 0644]
sc/inc/column.hxx
sc/inc/mtvelements.hxx
sc/source/core/data/column.cxx
sc/source/core/data/column3.cxx
sc/source/core/data/mtvelements.cxx
sc/source/filter/inc/orcusinterface.hxx
sc/source/filter/orcus/interface.cxx
sc/source/filter/orcus/orcusfiltersimpl.cxx
sc/source/filter/orcus/xmlcontext.cxx
sfx2/source/control/emojiview.cxx
solenv/flatpak-manifest.in

index 3ecde892403b36ad3c44ad8b3e8438baca24feee..f29eb568baf029c6db366b9c0a595b43fde69010 100644 (file)
@@ -3294,7 +3294,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), \
@@ -3313,7 +3313,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
index 6e27d476db0bd36ce1032756154c673ebb93db95..8a35bfad4cf6ec3c8f9b9f7150fa34f4c0943009 100644 (file)
Binary files a/configure.ac and b/configure.ac differ
index 5ca2d10051ecaab17aa864c7017ebef35e7ee6a1..e863906975bd79933ef93ed5fe2823efdaed9d9d 100644 (file)
@@ -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);
index 191bb2b911ac35aef6c84b37993fd0a36b1e8999..61193c7886a51d3a404aa9fb8d3ece2ad04db9db 100644 (file)
@@ -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 := 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 := c700d1325f744104d9fca0d5a019434901e9d51a16eedfb05792f90a298587a4
-export ORCUS_TARBALL := liborcus-0.16.1.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
index 747691809d2e108c70e2b60e2956185caea460c3..13d61a8fecbdebce1a293828cdaf2424828b1c63 100644 (file)
@@ -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:
index c7dd76ebfee531d0e61608e5f374ea502491cdcf..76a2a6afb1f29d14864417459e733f3ee6c6a84a 100644 (file)
@@ -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)
index 4e46591b98fee54696a9cff3c4558364620019cc..f266577562730a10e02d292020a8bbc4adc788f0 100644 (file)
@@ -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 \
index 0a0ca582882ac4428833203cba456ad7125792f1..3c318797a03107112b6d24163f7c2cfa2b9e9825 100644 (file)
@@ -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 \
 ))
index 710d126a8c17833edba5426ea37b4b04007517ae..87e462e33d91dc372dc8458c84abad808def6092 100644 (file)
@@ -15,17 +15,16 @@ $(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 \
        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/std-get-busted.patch.1 \
 ))
 
 ifeq ($(OS),WNT)
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 (file)
index e343088..0000000
+++ /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
-
index 1427148445d16648e81e1075fa848680824ecd9c..a8047d5c9e0a8b3ae98ed222236081df8a846e75 100644 (file)
@@ -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>
index 9edb13aec79b413e09a862f549878fd4dc47ce39..9543b44eb7c5dda2cc30953d2ebe5e2b7455ba8b 100644 (file)
@@ -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 (file)
index a3275b1..0000000
+++ /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/std-get-busted.patch.1 b/external/liborcus/std-get-busted.patch.1
new file mode 100644 (file)
index 0000000..40b839f
--- /dev/null
@@ -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
+
index 51aabfa1fb4765dc57639cb7bc35b16a458fd840..e86c74a722f3b50280d0f319f41a8aa205277190 100644 (file)
@@ -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 {
  
index 3c664336430b4e45175151bfd45e1730f524391f..cf5bd48a1eb69428b23596c5f033bd8998df9678 100644 (file)
@@ -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 (file)
index ba28cb1..0000000
+++ /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 (file)
index 0000000..c0c2947
--- /dev/null
@@ -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 (file)
index 0000000..ebfc94f
--- /dev/null
@@ -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
+
index 07b8f061bd8885dc047e4f2e4f68a38b81f9692a..7b945f30ab82d442c27d97d9501b00e1aaddbaf3 100644 (file)
@@ -122,8 +122,6 @@ class ScColumn
     // Broadcasters for formula cells.
     sc::BroadcasterStoreType maBroadcasters;
 
-    sc::CellStoreEvent maCellsEvent;
-
     // Cell values.
     sc::CellStoreType maCells;
 
index c4a2eb83413d1cc1aa6d3f76742c78d77e44b8c9..ba7a2e54d7e968e2b376405bb512fa456f307893 100644 (file)
 #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>
@@ -95,23 +95,32 @@ 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
+{
+    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.
index 8cdbf7e9386c191e078e30c6cce8b89b73b08cf3..a8d64353b813126d40d8023d8d22c3896bbf8d78 100644 (file)
@@ -81,8 +81,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 ),
index 3f30bbe326ab00fe2fb3b24948e87e52fef47207..38a64b189d6a602a99a574f7072ba7ef476dc28d 100644 (file)
@@ -155,6 +155,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();
index 792b4e9d60e6c998168a3a2e33730554b2df3c66..f1a6b26aba269b31a17487b203de44c0a8e5b016 100644 (file)
@@ -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)
index f92125d207ce8a65fb15912c7a51addfd1d87879..a00591fb80a63772b9f67d2c3e95d6d564897d0c 100644 (file)
@@ -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;
 };
 
@@ -638,8 +638,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;
index 78b9563bc8423b49eeb46f8f95e89fc7f2f22e1f..f80c93c6c7166abd4e082118f825ce0a43db292a 100644 (file)
@@ -159,9 +159,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(),
@@ -171,7 +171,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());
     }
 
@@ -183,9 +183,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(),
@@ -195,7 +195,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());
     }
 
@@ -230,13 +230,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.");
 }
@@ -307,9 +307,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)
     {
@@ -343,9 +343,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.
@@ -775,7 +775,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");
 }
@@ -791,7 +791,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");
@@ -885,7 +885,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");
 }
@@ -928,7 +928,7 @@ void ScOrcusFormula::reset()
     mnSharedFormulaIndex = 0;
     mbShared = false;
     meResType = ResultType::NotSet;
-    mnResult = 0;
+    maResult.clear();
     mfResult = 0.0;
 }
 
@@ -940,7 +940,6 @@ ScOrcusFormula::ScOrcusFormula( ScOrcusSheet& rSheet ) :
     mnSharedFormulaIndex(0),
     mbShared(false),
     meResType(ResultType::NotSet),
-    mnResult(0),
     mfResult(0.0) {}
 
 ScOrcusFormula::~ScOrcusFormula() {}
@@ -951,9 +950,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);
 }
 
@@ -969,10 +968,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()
@@ -1026,9 +1025,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:
@@ -1071,10 +1068,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*/)
@@ -1082,7 +1079,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
 }
@@ -1156,16 +1153,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();
 }
 
@@ -1255,15 +1252,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);
 }
 
@@ -1279,7 +1276,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*/)
 {
 }
 
@@ -1294,9 +1291,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()
@@ -1608,9 +1605,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;
 }
@@ -1725,16 +1722,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;
 }
 
@@ -1983,9 +1979,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;
 }
@@ -2139,9 +2135,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;
 }
 
@@ -2156,9 +2152,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;
 }
 
@@ -2213,9 +2209,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);
 }
 
index f063bd3b5524a4d3147db488e5fd5756ae400ccd..db2d5705d51e8371db12d6f4c41b8800cf4b00fb 100644 (file)
@@ -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)
     {
index 1f3ee58220a002d5b2a3d9c560cefce3169998cd..9c73a75436bf7f80e6c76f66b206f91cc0d8c0ad 100644 (file)
@@ -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();
     }
index 7475263044e2f8110e0af32a9188a46fb502f39a..f125552296e46bf747326939b08df6f7b3294344 100644 (file)
@@ -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")
                 {
index f44f11ebb5fbfe62d462104615fcb243fdbef015..40d94384842fda8c40e38c0709ddb2028b6f9406 100644 (file)
                     "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",
                     "dest-filename": "openldap-2.4.45.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.01.0.tar.xz",