Kaydet (Commit) 1d0727a1 authored tarafından Kohei Yoshida's avatar Kohei Yoshida Kaydeden (comit) Kohei Yoshida

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: 's avatarKohei Yoshida <libreoffice@kohei.us>
üst d7c16324
......@@ -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
......
......@@ -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
# ===========================================================
......
......@@ -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
......
From 3a6bb93a382b4d5f1463ee3fdd54cab7048ff996 Mon Sep 17 00:00:00 2001
From: Kohei Yoshida <kohei.yoshida@gmail.com>
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 <mdds/sorted_string_map.hpp>
+#include <cctype>
namespace orcus {
--
2.17.1
......@@ -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:
......@@ -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 \
) \
)
......
......@@ -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 \
......
......@@ -19,6 +19,7 @@ $(eval $(call gb_UnpackedTarball_add_patches,liborcus,\
external/liborcus/0001-workaround-a-linking-problem-on-windows.patch \
external/liborcus/rpath.patch.0 \
external/liborcus/gcc9.patch.0 \
external/liborcus/0001-Missing-header-for-std-tolower.patch \
))
ifeq ($(OS),WNT)
......
--- include/orcus/types.hpp
+++ include/orcus/types.hpp
@@ -7,6 +7,13 @@
@@ -7,6 +7,14 @@
#ifndef INCLUDED_ORCUS_TYPES_HPP
#define INCLUDED_ORCUS_TYPES_HPP
......@@ -10,6 +10,7 @@
+#pragma GCC diagnostic ignored "-Wpragmas" // for old GCC
+#pragma GCC diagnostic ignored "-Wunknown-warning-option" // for Clang
+#pragma GCC diagnostic ignored "-Wdeprecated-copy"
+#pragma GCC diagnostic ignored "-Wshadow"
+#endif
#include <cstdlib>
......
......@@ -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 );
......
......@@ -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)
......
......@@ -24,6 +24,7 @@
#include <orcus/orcus_xml.hpp>
#include <orcus/global.hpp>
#include <orcus/sax_parser_base.hpp>
#include <orcus/stream.hpp>
#include <com/sun/star/ucb/XCommandEnvironment.hpp>
#include <comphelper/processfactory.hxx>
......@@ -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&)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment