diff --git a/0001-Update-orcus-to-0.14.0.patch b/0001-Update-orcus-to-0.14.0.patch deleted file mode 100644 index 1ab6dc0..0000000 --- a/0001-Update-orcus-to-0.14.0.patch +++ /dev/null @@ -1,801 +0,0 @@ -From 1d0727a104d76210814f41c1169df318e40c9d80 Mon Sep 17 00:00:00 2001 -From: Kohei Yoshida -Date: Mon, 27 Aug 2018 11:06:17 -0400 -Subject: [PATCH] Update orcus to 0.14.0. - -And make all necessary adjustments for the new version of orcus. - -Change-Id: I0dc207162a3ddfaad6da198a3d13b65f530757d5 -Reviewed-on: https://gerrit.libreoffice.org/59884 -Tested-by: Jenkins -Reviewed-by: Kohei Yoshida ---- - RepositoryExternal.mk | 4 +- - configure.ac | 2 +- - download.lst | 4 +- - .../0001-Missing-header-for-std-tolower.patch | 24 ++ - external/liborcus/ExternalPackage_liborcus.mk | 8 +- - external/liborcus/ExternalProject_liborcus.mk | 4 +- - external/liborcus/Library_orcus.mk | 2 + - external/liborcus/UnpackedTarball_liborcus.mk | 1 + - external/liborcus/gcc9.patch.0 | 3 +- - sc/source/filter/inc/orcusinterface.hxx | 107 ++++-- - sc/source/filter/orcus/interface.cxx | 322 +++++++++++++----- - sc/source/filter/orcus/xmlcontext.cxx | 5 +- - 12 files changed, 360 insertions(+), 126 deletions(-) - create mode 100644 external/liborcus/0001-Missing-header-for-std-tolower.patch - -diff --git a/RepositoryExternal.mk b/RepositoryExternal.mk -index cec79cc105e8..f172765a84f8 100644 ---- a/RepositoryExternal.mk -+++ b/RepositoryExternal.mk -@@ -3295,7 +3295,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.13 \ -+ -L$(call gb_UnpackedTarball_get_dir,liborcus)/src/liborcus/.libs -lorcus-0.14 \ - ) - - $(if $(SYSTEM_BOOST), \ -@@ -3314,7 +3314,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.13 \ -+ -L$(call gb_UnpackedTarball_get_dir,liborcus)/src/parser/.libs -lorcus-parser-0.14 \ - ) - - endef -diff --git a/configure.ac b/configure.ac -index 3c9e5dc5e908..a60a3e72689f 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -9196,7 +9196,7 @@ AC_SUBST(ENABLE_FUZZERS) - dnl =================================================================== - dnl Orcus - dnl =================================================================== --libo_CHECK_SYSTEM_MODULE([orcus],[ORCUS],[liborcus-0.13 >= 0.13.3]) -+libo_CHECK_SYSTEM_MODULE([orcus],[ORCUS],[liborcus-0.14 >= 0.14.0]) - if test "$with_system_orcus" != "yes"; then - if test "$SYSTEM_BOOST" = "TRUE"; then - # =========================================================== -diff --git a/download.lst b/download.lst -index 1ed75b36f3b3..3532e2be3aa3 100644 ---- a/download.lst -+++ b/download.lst -@@ -192,8 +192,8 @@ export OPENLDAP_SHA256SUM := cdd6cffdebcd95161a73305ec13fc7a78e9707b46ca9f84fb89 - export OPENLDAP_TARBALL := openldap-2.4.45.tgz - export OPENSSL_SHA256SUM := ec3f5c9714ba0fd45cb4e087301eb1336c317e0d20b575a125050470e8089e4d - export OPENSSL_TARBALL := openssl-1.0.2o.tar.gz --export ORCUS_SHA256SUM := bc01b1b3e9091416f498840d3c19a1aa2704b448100e7f6b80eefe88aab06d5b --export ORCUS_TARBALL := liborcus-0.13.4.tar.gz -+export ORCUS_SHA256SUM := 7bcfac3f4f490540292cfc87d3fde7b47eafa8450afa1e1a2c181d8293dcd4ef -+export ORCUS_TARBALL := liborcus-0.14.0.tar.gz - export OWNCLOUD_ANDROID_LIB_SHA256SUM := b18b3e3ef7fae6a79b62f2bb43cc47a5346b6330f6a383dc4be34439aca5e9fb - export OWNCLOUD_ANDROID_LIB_TARBALL := owncloud-android-library-0.9.4-no-binary-deps.tar.gz - export PAGEMAKER_SHA256SUM := 66adacd705a7d19895e08eac46d1e851332adf2e736c566bef1164e7a442519d -diff --git a/external/liborcus/0001-Missing-header-for-std-tolower.patch b/external/liborcus/0001-Missing-header-for-std-tolower.patch -new file mode 100644 -index 000000000000..2e00be92a872 ---- /dev/null -+++ b/external/liborcus/0001-Missing-header-for-std-tolower.patch -@@ -0,0 +1,24 @@ -+From 3a6bb93a382b4d5f1463ee3fdd54cab7048ff996 Mon Sep 17 00:00:00 2001 -+From: Kohei Yoshida -+Date: Fri, 31 Aug 2018 16:07:06 -0400 -+Subject: [PATCH] Missing header for std::tolower. -+ -+--- -+ src/parser/sax_token_parser.cpp | 1 + -+ 1 file changed, 1 insertion(+) -+ -+diff --git a/src/parser/sax_token_parser.cpp b/src/parser/sax_token_parser.cpp -+index 9790b498..44ba5844 100644 -+--- a/src/parser/sax_token_parser.cpp -++++ b/src/parser/sax_token_parser.cpp -+@@ -9,6 +9,7 @@ -+ #include "orcus/tokens.hpp" -+ -+ #include -++#include -+ -+ namespace orcus { -+ -+-- -+2.17.1 -+ -diff --git a/external/liborcus/ExternalPackage_liborcus.mk b/external/liborcus/ExternalPackage_liborcus.mk -index 32382b7d89a1..ffa0b38bea19 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.13.0.dylib,src/liborcus/.libs/liborcus-0.13.0.dylib)) --$(eval $(call gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-parser-0.13.0.dylib,src/parser/.libs/liborcus-parser-0.13.0.dylib)) -+$(eval $(call gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-0.14.0.dylib,src/liborcus/.libs/liborcus-0.14.0.dylib)) -+$(eval $(call gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-parser-0.14.0.dylib,src/parser/.libs/liborcus-parser-0.14.0.dylib)) - else ifeq ($(DISABLE_DYNLOADING),) --$(eval $(call gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-0.13.so.0,src/liborcus/.libs/liborcus-0.13.so.0.0.0)) --$(eval $(call gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-parser-0.13.so.0,src/parser/.libs/liborcus-parser-0.13.so.0.0.0)) -+$(eval $(call gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-0.14.so.0,src/liborcus/.libs/liborcus-0.14.so.0.0.0)) -+$(eval $(call gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-parser-0.14.so.0,src/parser/.libs/liborcus-parser-0.14.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 928c78e3a267..1aa591228f40 100644 ---- a/external/liborcus/ExternalProject_liborcus.mk -+++ b/external/liborcus/ExternalProject_liborcus.mk -@@ -114,8 +114,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.13.0.dylib \ -- $(EXTERNAL_WORKDIR)/src/parser/.libs/liborcus-parser-0.13.0.dylib \ -+ $(EXTERNAL_WORKDIR)/src/liborcus/.libs/liborcus-0.14.0.dylib \ -+ $(EXTERNAL_WORKDIR)/src/parser/.libs/liborcus-parser-0.14.0.dylib \ - ) \ - ) - -diff --git a/external/liborcus/Library_orcus.mk b/external/liborcus/Library_orcus.mk -index 6457ec4afc0c..1f026c425244 100644 ---- a/external/liborcus/Library_orcus.mk -+++ b/external/liborcus/Library_orcus.mk -@@ -55,6 +55,7 @@ $(eval $(call gb_Library_add_generated_exception_objects,orcus,\ - UnpackedTarball/liborcus/src/liborcus/detection_result \ - UnpackedTarball/liborcus/src/liborcus/dom_tree \ - UnpackedTarball/liborcus/src/liborcus/format_detection \ -+ UnpackedTarball/liborcus/src/liborcus/formula_result \ - UnpackedTarball/liborcus/src/liborcus/global \ - UnpackedTarball/liborcus/src/liborcus/gnumeric_cell_context \ - UnpackedTarball/liborcus/src/liborcus/gnumeric_context \ -@@ -96,6 +97,7 @@ $(eval $(call gb_Library_add_generated_exception_objects,orcus,\ - UnpackedTarball/liborcus/src/liborcus/orcus_xlsx \ - UnpackedTarball/liborcus/src/liborcus/orcus_xml \ - UnpackedTarball/liborcus/src/liborcus/session_context \ -+ UnpackedTarball/liborcus/src/liborcus/spreadsheet_iface_util \ - UnpackedTarball/liborcus/src/liborcus/spreadsheet_interface \ - UnpackedTarball/liborcus/src/liborcus/spreadsheet_types \ - UnpackedTarball/liborcus/src/liborcus/string_helper \ -diff --git a/external/liborcus/UnpackedTarball_liborcus.mk b/external/liborcus/UnpackedTarball_liborcus.mk -index 215bd4b8cc15..f637cc73db46 100644 ---- a/external/liborcus/UnpackedTarball_liborcus.mk -+++ b/external/liborcus/UnpackedTarball_liborcus.mk -@@ -19,5 +19,6 @@ $(eval $(call gb_UnpackedTarball_add_patches,liborcus,\ - external/liborcus/0001-workaround-a-linking-problem-on-windows.patch \ - external/liborcus/rpath.patch.0 \ -+ external/liborcus/0001-Missing-header-for-std-tolower.patch \ - )) - - ifeq ($(OS),WNT) -diff --git a/sc/source/filter/inc/orcusinterface.hxx b/sc/source/filter/inc/orcusinterface.hxx -index 028fb4126f01..dce0d5b0a64e 100644 ---- a/sc/source/filter/inc/orcusinterface.hxx -+++ b/sc/source/filter/inc/orcusinterface.hxx -@@ -54,6 +54,7 @@ public: - ScOrcusGlobalSettings(ScDocumentImport& rDoc); - - virtual void set_origin_date(int year, int month, int day) override; -+ virtual void set_character_set(orcus::character_set_t cs) override; - - virtual void set_default_formula_grammar(orcus::spreadsheet::formula_grammar_t grammar) override; - virtual orcus::spreadsheet::formula_grammar_t get_default_formula_grammar() const override; -@@ -181,7 +182,7 @@ public: - - virtual ~ScOrcusAutoFilter() override; - -- virtual void set_range(const char* p_ref, size_t n_ref) override; -+ virtual void set_range(const orcus::spreadsheet::range_t& range) override; - - virtual void set_column(orcus::spreadsheet::col_t col) override; - -@@ -214,22 +215,95 @@ public: - virtual void set_merge_cell_range(const orcus::spreadsheet::range_t& range) override; - }; - -+class ScOrcusSheet; -+ -+class ScOrcusFormula : public orcus::spreadsheet::iface::import_formula -+{ -+ enum class ResultType { NotSet, String, Value, Empty }; -+ -+ friend class ScOrcusSheet; -+ -+ ScOrcusSheet& mrSheet; -+ -+ SCCOL mnCol; -+ SCROW mnRow; -+ OUString maFormula; -+ formula::FormulaGrammar::Grammar meGrammar; -+ size_t mnSharedFormulaIndex; -+ bool mbShared; -+ -+ ResultType meResType; -+ size_t mnResult; // result string index. -+ double mfResult; -+ -+ void reset(); -+ -+public: -+ ScOrcusFormula( ScOrcusSheet& rSheet ); -+ 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_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_empty() override; -+ virtual void set_result_bool(bool value) override; -+ virtual void commit() override; -+}; -+ -+class ScOrcusArrayFormula : public orcus::spreadsheet::iface::import_array_formula -+{ -+ friend class ScOrcusSheet; -+ -+ ScOrcusSheet& mrSheet; -+ -+ SCCOL mnCol; -+ SCROW mnRow; -+ uint32_t mnColRange; -+ uint32_t mnRowRange; -+ OUString maFormula; -+ formula::FormulaGrammar::Grammar meGrammar; -+ -+ void reset(); -+ -+public: -+ ScOrcusArrayFormula( ScOrcusSheet& rSheet ); -+ 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_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_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; -+}; -+ - class ScOrcusSheet : public orcus::spreadsheet::iface::import_sheet - { -+ friend class ScOrcusFormula; -+ friend class ScOrcusArrayFormula; -+ - ScDocumentImport& mrDoc; - SCTAB mnTab; - ScOrcusFactory& mrFactory; - ScOrcusStyles& mrStyles; - sc::SharedFormulaGroups maFormulaGroups; -+ - ScOrcusAutoFilter maAutoFilter; - ScOrcusSheetProperties maProperties; - ScOrcusConditionalFormat maConditionalFormat; - ScOrcusNamedExpression maNamedExpressions; -+ ScOrcusFormula maFormula; -+ ScOrcusArrayFormula maArrayFormula; - - int mnCellCount; - - void cellInserted(); - -+ ScDocumentImport& getDoc(); -+ - public: - ScOrcusSheet(ScDocumentImport& rDoc, SCTAB nTab, ScOrcusFactory& rFactory); - -@@ -238,6 +312,8 @@ public: - virtual orcus::spreadsheet::iface::import_sheet_properties* get_sheet_properties() override; - virtual orcus::spreadsheet::iface::import_conditional_format* get_conditional_format() override; - virtual orcus::spreadsheet::iface::import_named_expression* get_named_expression() override; -+ virtual orcus::spreadsheet::iface::import_formula* get_formula() override; -+ 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; -@@ -251,33 +327,13 @@ public: - virtual void set_format(orcus::spreadsheet::row_t row_start, orcus::spreadsheet::col_t col_start, - orcus::spreadsheet::row_t row_end, orcus::spreadsheet::col_t col_end, size_t xf_index) override; - -- virtual void set_formula(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, orcus::spreadsheet::formula_grammar_t grammar, const char* p, size_t n) override; -- virtual void set_formula_result(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, const char* p, size_t n) override; -- virtual void set_formula_result(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, double val) override; -- -- virtual void set_shared_formula( -- orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, orcus::spreadsheet::formula_grammar_t grammar, size_t sindex, -- const char* p_formula, size_t n_formula) override; -- -- virtual void set_shared_formula( -- orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, orcus::spreadsheet::formula_grammar_t grammar, size_t sindex, -- const char* p_formula, size_t n_formula, const char* p_range, size_t n_range) override; -- -- virtual void set_shared_formula(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, size_t sindex) override; -- -- virtual void set_array_formula( -- orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, orcus::spreadsheet::formula_grammar_t grammar, -- const char* p, size_t n, orcus::spreadsheet::row_t array_rows, orcus::spreadsheet::col_t array_cols) override; -- -- virtual void set_array_formula( -- orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, orcus::spreadsheet::formula_grammar_t grammar, -- const char* p, size_t n, const char* p_range, size_t n_range) override; -- - virtual orcus::spreadsheet::range_size_t get_sheet_size() const override; - - SCTAB getIndex() const { return mnTab; } - - const sc::SharedFormulaGroups& getSharedFormulaGroups() const; -+ sc::SharedFormulaGroups& getSharedFormulaGroups(); -+ ScOrcusFactory& getFactory(); - }; - - class ScOrcusStyles : public orcus::spreadsheet::iface::import_styles -@@ -312,7 +368,7 @@ private: - - struct fill - { -- OUString maPattern; -+ orcus::spreadsheet::fill_pattern_t mePattern; - Color maFgColor; - Color maBgColor; - -@@ -446,7 +502,7 @@ public: - // fill - - virtual void set_fill_count(size_t n) override; -- virtual void set_fill_pattern_type(const char* s, size_t n) override; -+ virtual void set_fill_pattern_type(orcus::spreadsheet::fill_pattern_t fp) override; - virtual void set_fill_fg_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_fill_bg_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 size_t commit_fill() override; -@@ -580,6 +636,7 @@ public: - - size_t appendString(const OUString& rStr); - size_t addString(const OUString& rStr); -+ const OUString* getString(size_t nIndex) const; - - void pushCellStoreAutoToken( const ScAddress& rPos, const OUString& rVal ); - void pushCellStoreToken( const ScAddress& rPos, uint32_t nStrIndex ); -diff --git a/sc/source/filter/orcus/interface.cxx b/sc/source/filter/orcus/interface.cxx -index dcf3e83d7eae..7b8425d3007d 100644 ---- a/sc/source/filter/orcus/interface.cxx -+++ b/sc/source/filter/orcus/interface.cxx -@@ -101,6 +101,11 @@ void ScOrcusGlobalSettings::set_origin_date(int year, int month, int day) - mrDoc.setOriginDate(year, month, day); - } - -+void ScOrcusGlobalSettings::set_character_set(orcus::character_set_t /*cs*/) -+{ -+ // TODO -+} -+ - void ScOrcusGlobalSettings::set_default_formula_grammar(os::formula_grammar_t grammar) - { - meCalcGrammar = getCalcGrammarFromOrcus(grammar); -@@ -463,6 +468,11 @@ size_t ScOrcusFactory::addString(const OUString& rStr) - return appendString(rStr); - } - -+const OUString* ScOrcusFactory::getString(size_t nIndex) const -+{ -+ return nIndex < maStrings.size() ? &maStrings[nIndex] : nullptr; -+} -+ - void ScOrcusFactory::pushCellStoreAutoToken( const ScAddress& rPos, const OUString& rVal ) - { - maCellStoreTokens.emplace_back(rPos, CellStoreToken::Type::Auto); -@@ -816,10 +826,197 @@ ScOrcusSheet::ScOrcusSheet(ScDocumentImport& rDoc, SCTAB nTab, ScOrcusFactory& r - maProperties(mnTab, mrDoc), - maConditionalFormat(mnTab, rDoc.getDoc()), - maNamedExpressions(rDoc, rFactory.getGlobalSettings(), nTab), -+ maFormula(*this), -+ maArrayFormula(*this), - mnCellCount(0) - { - } - -+void ScOrcusFormula::reset() -+{ -+ mnCol = -1; -+ mnRow = -1; -+ maFormula.clear(); -+ meGrammar = formula::FormulaGrammar::GRAM_UNSPECIFIED; -+ mnSharedFormulaIndex = 0; -+ mbShared = false; -+ meResType = ResultType::NotSet; -+ mnResult = 0; -+ mfResult = 0.0; -+} -+ -+ScOrcusFormula::ScOrcusFormula( ScOrcusSheet& rSheet ) : -+ mrSheet(rSheet), -+ mnCol(-1), -+ mnRow(-1), -+ meGrammar(formula::FormulaGrammar::GRAM_UNSPECIFIED), -+ mnSharedFormulaIndex(0), -+ mbShared(false), -+ meResType(ResultType::NotSet), -+ mnResult(0), -+ mfResult(0.0) {} -+ -+ScOrcusFormula::~ScOrcusFormula() {} -+ -+void ScOrcusFormula::set_position(os::row_t row, os::col_t col) -+{ -+ mnCol = col; -+ mnRow = row; -+} -+ -+void ScOrcusFormula::set_formula(os::formula_grammar_t grammar, const char* p, size_t n) -+{ -+ maFormula = OUString(p, n, RTL_TEXTENCODING_UTF8); -+ meGrammar = getCalcGrammarFromOrcus(grammar); -+} -+ -+void ScOrcusFormula::set_shared_formula_index(size_t index) -+{ -+ mnSharedFormulaIndex = index; -+ mbShared = true; -+} -+ -+void ScOrcusFormula::set_result_value(double value) -+{ -+ meResType = ResultType::Value; -+ mfResult = value; -+} -+ -+void ScOrcusFormula::set_result_string(size_t sindex) -+{ -+ meResType = ResultType::String; -+ mnResult = sindex; -+} -+ -+void ScOrcusFormula::set_result_empty() -+{ -+ meResType = ResultType::Empty; -+} -+ -+void ScOrcusFormula::set_result_bool(bool value) -+{ -+ meResType = ResultType::Value; -+ mfResult = value ? 1.0 : 0.0; -+} -+ -+void ScOrcusFormula::commit() -+{ -+ ScOrcusFactory& rFactory = mrSheet.getFactory(); -+ sc::SharedFormulaGroups& rGroups = mrSheet.getSharedFormulaGroups(); -+ ScAddress aPos(mnCol, mnRow, mrSheet.getIndex()); -+ -+ if (mbShared) -+ { -+ if (maFormula.isEmpty()) -+ { -+ // shared formula that references existing formula token. -+ const ScTokenArray* pArray = rGroups.get(mnSharedFormulaIndex); -+ if (!pArray) -+ return; -+ } -+ else -+ { -+ // topmost shared formula with new formula token. -+ -+ // Compile the formula expression into tokens. -+ ScCompiler aComp(&mrSheet.getDoc().getDoc(), aPos, meGrammar); -+ ScTokenArray* pArray = aComp.CompileString(maFormula); -+ if (!pArray) -+ // Tokenization failed. -+ return; -+ -+ rGroups.set(mnSharedFormulaIndex, pArray); -+ } -+ rFactory.pushSharedFormulaToken(aPos, mnSharedFormulaIndex); -+ } -+ else -+ { -+ // non-shared formula -+ rFactory.pushCellStoreToken(aPos, maFormula, meGrammar); -+ } -+ -+ switch (meResType) -+ { -+ case ResultType::String: -+ { -+ const OUString* pStr = rFactory.getString(mnResult); -+ if (pStr) -+ rFactory.pushFormulaResult(aPos, *pStr); -+ break; -+ } -+ case ResultType::Value: -+ rFactory.pushFormulaResult(aPos, mfResult); -+ break; -+ default: -+ ; -+ } -+ -+ mrSheet.cellInserted(); -+} -+ -+void ScOrcusArrayFormula::reset() -+{ -+ mnCol = -1; -+ mnRow = -1; -+ mnColRange = 0; -+ mnRowRange = 0; -+ -+ maFormula.clear(); -+ meGrammar = formula::FormulaGrammar::GRAM_UNSPECIFIED; -+} -+ -+ScOrcusArrayFormula::ScOrcusArrayFormula( ScOrcusSheet& rSheet ) : -+ mrSheet(rSheet), -+ mnCol(-1), -+ mnRow(-1), -+ mnColRange(0), -+ mnRowRange(0), -+ meGrammar(formula::FormulaGrammar::GRAM_UNSPECIFIED) {} -+ -+ScOrcusArrayFormula::~ScOrcusArrayFormula() {} -+ -+void ScOrcusArrayFormula::set_range(const os::range_t& range) -+{ -+ mnCol = range.first.column; -+ mnRow = range.first.row; -+ -+ mnColRange = range.last.column - range.first.column + 1; -+ mnRowRange = range.last.row - range.first.column + 1; -+} -+ -+void ScOrcusArrayFormula::set_formula(os::formula_grammar_t grammar, const char* p, size_t n) -+{ -+ meGrammar = getCalcGrammarFromOrcus(grammar); -+ maFormula = OUString(p, n, RTL_TEXTENCODING_UTF8); -+} -+ -+void ScOrcusArrayFormula::set_result_value(os::row_t /*row*/, os::col_t /*col*/, double /*value*/) -+{ -+ // TODO : implement result cache for matrix -+} -+ -+void ScOrcusArrayFormula::set_result_string(os::row_t /*row*/, os::col_t /*col*/, size_t /*sindex*/) -+{ -+ // TODO : implement result cache for matrix -+} -+ -+void ScOrcusArrayFormula::set_result_empty(os::row_t /*row*/, os::col_t /*col*/) -+{ -+ // TODO : implement result cache for matrix -+} -+ -+void ScOrcusArrayFormula::set_result_bool(os::row_t /*row*/, os::col_t /*col*/, bool /*value*/) -+{ -+ // TODO : implement result cache for matrix -+} -+ -+void ScOrcusArrayFormula::commit() -+{ -+ ScAddress aPos(mnCol, mnRow, mrSheet.getIndex()); -+ mrSheet.getFactory().pushMatrixFormulaToken(aPos, maFormula, meGrammar, mnRowRange, mnColRange); -+ mrSheet.cellInserted(); -+} -+ - void ScOrcusSheet::cellInserted() - { - ++mnCellCount; -@@ -830,6 +1027,11 @@ void ScOrcusSheet::cellInserted() - } - } - -+ScDocumentImport& ScOrcusSheet::getDoc() -+{ -+ return mrDoc; -+} -+ - os::iface::import_auto_filter* ScOrcusSheet::get_auto_filter() - { - return &maAutoFilter; -@@ -855,6 +1057,18 @@ os::iface::import_named_expression* ScOrcusSheet::get_named_expression() - return &maNamedExpressions; - } - -+os::iface::import_formula* ScOrcusSheet::get_formula() -+{ -+ maFormula.reset(); -+ return &maFormula; -+} -+ -+os::iface::import_array_formula* ScOrcusSheet::get_array_formula() -+{ -+ maArrayFormula.reset(); -+ return &maArrayFormula; -+} -+ - void ScOrcusSheet::set_auto(os::row_t row, os::col_t col, const char* p, size_t n) - { - OUString aVal(p, n, RTL_TEXTENCODING_UTF8); -@@ -921,83 +1135,6 @@ void ScOrcusSheet::set_format(os::row_t row_start, os::col_t col_start, - mrDoc.getDoc().ApplyPatternAreaTab(col_start, row_start, col_end, row_end, mnTab, aPattern); - } - --void ScOrcusSheet::set_formula( -- os::row_t row, os::col_t col, os::formula_grammar_t grammar, const char* p, size_t n) --{ -- OUString aFormula(p, n, RTL_TEXTENCODING_UTF8); -- mrFactory.pushCellStoreToken( -- ScAddress(col, row, mnTab), aFormula, getCalcGrammarFromOrcus(grammar)); -- cellInserted(); --} -- --void ScOrcusSheet::set_formula_result(os::row_t row, os::col_t col, const char* p, size_t n) --{ -- OUString aResult( p, n, RTL_TEXTENCODING_UTF8); -- mrFactory.pushFormulaResult(ScAddress(col, row, mnTab), aResult); --} -- --void ScOrcusSheet::set_formula_result(os::row_t row, os::col_t col, double val) --{ -- mrFactory.pushFormulaResult(ScAddress(col, row, mnTab), val); --} -- --void ScOrcusSheet::set_shared_formula( -- os::row_t row, os::col_t col, os::formula_grammar_t grammar, size_t sindex, -- const char* p_formula, size_t n_formula) --{ -- ScAddress aPos(col, row, mnTab); -- OUString aFormula(p_formula, n_formula, RTL_TEXTENCODING_UTF8); -- formula::FormulaGrammar::Grammar eGram = getCalcGrammarFromOrcus(grammar); -- -- // Compile the formula expression into tokens. -- ScCompiler aComp(&mrDoc.getDoc(), aPos, eGram); -- ScTokenArray* pArray = aComp.CompileString(aFormula); -- if (!pArray) -- // Tokenization failed. -- return; -- -- maFormulaGroups.set(sindex, pArray); -- -- mrFactory.pushSharedFormulaToken(aPos, sindex); -- cellInserted(); --} -- --void ScOrcusSheet::set_shared_formula( -- os::row_t row, os::col_t col, os::formula_grammar_t grammar, size_t sindex, -- const char* p_formula, size_t n_formula, const char* /*p_range*/, size_t /*n_range*/) --{ -- set_shared_formula(row, col, grammar, sindex, p_formula, n_formula); --} -- --void ScOrcusSheet::set_shared_formula(os::row_t row, os::col_t col, size_t sindex) --{ -- ScAddress aPos(col, row, mnTab); -- -- const ScTokenArray* pArray = maFormulaGroups.get(sindex); -- if (!pArray) -- return; -- -- mrFactory.pushSharedFormulaToken(aPos, sindex); -- cellInserted(); --} -- --void ScOrcusSheet::set_array_formula( -- os::row_t row, os::col_t col, os::formula_grammar_t grammar, -- const char* p, size_t n, os::row_t array_rows, os::col_t array_cols) --{ -- OUString aFormula(p, n, RTL_TEXTENCODING_UTF8); -- formula::FormulaGrammar::Grammar eGrammar = getCalcGrammarFromOrcus(grammar); -- -- ScAddress aPos(col, row, mnTab); -- mrFactory.pushMatrixFormulaToken(aPos, aFormula, eGrammar, array_rows, array_cols); --} -- --void ScOrcusSheet::set_array_formula( -- os::row_t /*row*/, os::col_t /*col*/, os::formula_grammar_t /*grammar*/, -- const char* /*p*/, size_t /*n*/, const char* /*p_range*/, size_t /*n_range*/) --{ --} -- - orcus::spreadsheet::range_size_t ScOrcusSheet::get_sheet_size() const - { - orcus::spreadsheet::range_size_t ret; -@@ -1012,6 +1149,16 @@ const sc::SharedFormulaGroups& ScOrcusSheet::getSharedFormulaGroups() const - return maFormulaGroups; - } - -+sc::SharedFormulaGroups& ScOrcusSheet::getSharedFormulaGroups() -+{ -+ return maFormulaGroups; -+} -+ -+ScOrcusFactory& ScOrcusSheet::getFactory() -+{ -+ return mrFactory; -+} -+ - ScOrcusSharedStrings::ScOrcusSharedStrings(ScOrcusFactory& rFactory) : - mrFactory(rFactory) {} - -@@ -1087,7 +1234,7 @@ ScOrcusStyles::font::font(): - } - - ScOrcusStyles::fill::fill(): -- maPattern(""), -+ mePattern(orcus::spreadsheet::fill_pattern_t::none), - maFgColor(COL_WHITE), - maBgColor(COL_WHITE), - mbHasFillAttr(false) -@@ -1143,13 +1290,13 @@ void ScOrcusStyles::font::applyToItemSet(SfxItemSet& rSet) const - - void ScOrcusStyles::fill::applyToItemSet(SfxItemSet& rSet) const - { -- if (maPattern.equalsIgnoreAsciiCase("none")) -+ if (mePattern == orcus::spreadsheet::fill_pattern_t::none) - { - SAL_INFO("sc.orcus.style", "no fill style"); - return; - } - -- if (maPattern.equalsIgnoreAsciiCase("solid")) -+ if (mePattern == orcus::spreadsheet::fill_pattern_t::solid) - rSet.Put(SvxBrushItem(maFgColor, ATTR_BACKGROUND)); - } - -@@ -1575,10 +1722,9 @@ void ScOrcusStyles::set_fill_count(size_t /*n*/) - // needed at all? - } - --void ScOrcusStyles::set_fill_pattern_type(const char* s, size_t n) -+void ScOrcusStyles::set_fill_pattern_type(orcus::spreadsheet::fill_pattern_t fp) - { -- maCurrentFill.maPattern = OUString(s, n, RTL_TEXTENCODING_UTF8); -- maCurrentFill.mbHasFillAttr = true; -+ maCurrentFill.mePattern = fp; - } - - void ScOrcusStyles::set_fill_fg_color( -@@ -1962,12 +2108,12 @@ ScOrcusAutoFilter::~ScOrcusAutoFilter() - { - } - --void ScOrcusAutoFilter::set_range(const char* p_ref, size_t n_ref) -+void ScOrcusAutoFilter::set_range(const orcus::spreadsheet::range_t& range) - { -- OUString aRange(p_ref, n_ref, RTL_TEXTENCODING_UTF8); -- SAL_INFO("sc.orcus.autofilter", "set_range: " << aRange); -- -- maRange.Parse(aRange); -+ maRange.aStart.SetRow(range.first.row); -+ maRange.aStart.SetCol(range.first.column); -+ maRange.aEnd.SetRow(range.last.row); -+ maRange.aEnd.SetCol(range.last.column); - } - - void ScOrcusAutoFilter::set_column(orcus::spreadsheet::col_t col) -diff --git a/sc/source/filter/orcus/xmlcontext.cxx b/sc/source/filter/orcus/xmlcontext.cxx -index e47b862c2138..5494ddefc434 100644 ---- a/sc/source/filter/orcus/xmlcontext.cxx -+++ b/sc/source/filter/orcus/xmlcontext.cxx -@@ -24,6 +24,7 @@ - #include - #include - #include -+#include - - #include - #include -@@ -289,7 +290,9 @@ void ScOrcusXMLContextImpl::importXML(const ScOrcusImportXMLParam& rParam) - } - } - -- filter.read_file(path); -+ std::string content = orcus::load_file_content(path); -+ filter.read_stream(content.data(), content.size()); -+ - aFactory.finalize(); - } - catch (const std::exception&) --- -2.17.1 - diff --git a/0001-mdds-1.4.1-is-now-a-minimum-requirement.patch b/0001-mdds-1.4.1-is-now-a-minimum-requirement.patch deleted file mode 100644 index 2e09b94..0000000 --- a/0001-mdds-1.4.1-is-now-a-minimum-requirement.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 4d1f735fcf064b18ef2848cc1f5a2a0616b0b33d Mon Sep 17 00:00:00 2001 -From: Kohei Yoshida -Date: Sun, 26 Aug 2018 14:19:57 -0400 -Subject: [PATCH] mdds 1.4.1 is now a minimum requirement. - -Change-Id: I647bcfbdd8e0417990ed93b25c1bca00f60df709 -Reviewed-on: https://gerrit.libreoffice.org/59614 -Tested-by: Jenkins -Reviewed-by: Kohei Yoshida ---- - configure.ac | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/configure.ac b/configure.ac -index efce45dbd370..46758b51037d 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -8849,7 +8849,7 @@ AC_SUBST(SYSTEM_BOOST) - dnl =================================================================== - dnl Check for system mdds - dnl =================================================================== --libo_CHECK_SYSTEM_MODULE([mdds], [MDDS], [mdds-1.2 >= 1.2.3], ["-I${WORKDIR}/UnpackedTarball/mdds/include"]) -+libo_CHECK_SYSTEM_MODULE([mdds], [MDDS], [mdds-1.4 >= 1.4.0], ["-I${WORKDIR}/UnpackedTarball/mdds/include"]) - - dnl =================================================================== - dnl Check for system glm --- -2.17.1 - diff --git a/libreoffice.spec b/libreoffice.spec index c920d40..22c0ac2 100644 --- a/libreoffice.spec +++ b/libreoffice.spec @@ -236,13 +236,8 @@ BuildRequires: pkgconfig(harfbuzz) BuildRequires: pkgconfig(libeot) BuildRequires: pkgconfig(libepubgen-0.1) BuildRequires: pkgconfig(libqxp-0.0) -%if 0%{?rhel} BuildRequires: pkgconfig(liborcus-0.13) BuildRequires: pkgconfig(mdds-1.2) -%else -BuildRequires: pkgconfig(liborcus-0.14) -BuildRequires: pkgconfig(mdds-1.4) -%endif BuildRequires: libnumbertext-devel %endif @@ -275,10 +270,6 @@ Patch0: 0001-don-t-suppress-crashes.patch Patch1: 0001-Resolves-rhbz-1432468-disable-opencl-by-default.patch # not upstreamed Patch2: 0001-gtk3-only-for-3.20.patch -%if !0%{?rhel} -Patch3: 0001-mdds-1.4.1-is-now-a-minimum-requirement.patch -Patch4: 0001-Update-orcus-to-0.14.0.patch -%endif %if 0%{?rhel} # not upstreamed