]> git.pld-linux.org Git - packages/libreoffice.git/commitdiff
- fix build with liborcus 0.5.x,
authorJan Rękorajski <baggins@pld-linux.org>
Wed, 17 Jul 2013 06:45:14 +0000 (08:45 +0200)
committerJan Rękorajski <baggins@pld-linux.org>
Wed, 17 Jul 2013 06:45:14 +0000 (08:45 +0200)
  http://svnweb.freebsd.org/ports/head/editors/libreoffice/files/patch-liborcus-0.5.x

liborcus-0.5.x.patch [new file with mode: 0644]
libreoffice-liborcus-build.patch [deleted file]
libreoffice.spec

diff --git a/liborcus-0.5.x.patch b/liborcus-0.5.x.patch
new file mode 100644 (file)
index 0000000..79ad36e
--- /dev/null
@@ -0,0 +1,540 @@
+--- sc/inc/document.hxx        2013-06-11 05:33:38.000000000 -0400
++++ sc/inc/document.hxx        2013-06-24 19:08:23.000000000 -0400
+@@ -750,6 +750,7 @@
+     SC_DLLPUBLIC bool           SetString(
+         SCCOL nCol, SCROW nRow, SCTAB nTab, const rtl::OUString& rString,
+         ScSetStringParam* pParam = NULL );
++    SC_DLLPUBLIC bool SetString( const ScAddress& rPos, const OUString& rString, ScSetStringParam* pParam = NULL );
+     SC_DLLPUBLIC void           SetValue( SCCOL nCol, SCROW nRow, SCTAB nTab, const double& rVal );
+     void            SetError( SCCOL nCol, SCROW nRow, SCTAB nTab, const sal_uInt16 nError);
+--- sc/inc/orcusfilters.hxx    2013-06-11 05:33:38.000000000 -0400
++++ sc/inc/orcusfilters.hxx    2013-06-24 19:08:23.000000000 -0400
+@@ -30,6 +30,10 @@
+     virtual bool importGnumeric(ScDocument& rDoc, const rtl::OUString& rPath) const = 0;
++    virtual bool importXLSX(ScDocument& rDoc, const rtl::OUString& rPath) const = 0;
++
++    virtual bool importODS(ScDocument& rDoc, const rtl::OUString& rPath) const = 0;
++
+     /**
+      * Create a context for XML file.  The context object stores session
+      * information for each unique XML file.  You must create a new context
+--- sc/inc/stringutil.hxx      2013-06-11 05:33:38.000000000 -0400
++++ sc/inc/stringutil.hxx      2013-06-24 19:08:23.000000000 -0400
+@@ -72,16 +72,26 @@
+     TextFormatPolicy meSetTextNumFormat;
+     /**
+-     * When true, treat input with a leading apostrophe / single quote special
+-     * in that it escapes numeric or date/time input such that it is not
+-     * interpreted and the input string is taken instead. This can be used
+-     * during text file import so the leading apostrophe is not lost if it
+-     * precedes a numeric value.
+-     * Usually set mbHandleApostrophe = !mbSetTextCellFormat
++     * When true, treat input with a leading apostrophe as an escape character
++     * for a numeric value content, to treat the numeric value as a text. When
++     * false, the whole string input including the leading apostrophe will be
++     * entered literally as string.
+      */
+     bool mbHandleApostrophe;
+     ScSetStringParam();
++
++    /**
++     * Call this whenever you need to unconditionally set input as text, no
++     * matter what the input is.
++     */
++    void setTextInput();
++
++    /**
++     * Call this whenever you need to maximize the chance of input being
++     * detected as a numeric value (numbers, dates, times etc).
++     */
++    void setNumericInput();
+ };
+ // ============================================================================
+--- sc/source/core/data/document.cxx   2013-06-11 05:33:38.000000000 -0400
++++ sc/source/core/data/document.cxx   2013-06-24 19:08:23.000000000 -0400
+@@ -2940,6 +2940,12 @@
+         return false;
+ }
++bool ScDocument::SetString(
++    const ScAddress& rPos, const OUString& rString, ScSetStringParam* pParam )
++{
++    return SetString(rPos.Col(), rPos.Row(), rPos.Tab(), rString, pParam);
++}
++
+ void ScDocument::SetValue( SCCOL nCol, SCROW nRow, SCTAB nTab, const double& rVal )
+ {
+--- sc/source/core/tool/stringutil.cxx 2013-06-11 05:33:38.000000000 -0400
++++ sc/source/core/tool/stringutil.cxx 2013-06-24 19:08:23.000000000 -0400
+@@ -32,6 +32,20 @@
+ {
+ }
++void ScSetStringParam::setTextInput()
++{
++    mbDetectNumberFormat = false;
++    mbHandleApostrophe = false;
++    meSetTextNumFormat = Always;
++}
++
++void ScSetStringParam::setNumericInput()
++{
++    mbDetectNumberFormat = true;
++    mbHandleApostrophe = true;
++    meSetTextNumFormat = Never;
++}
++
+ // ============================================================================-
+ bool ScStringUtil::parseSimpleNumber(
+--- sc/source/filter/inc/orcusfiltersimpl.hxx  2013-06-11 05:33:38.000000000 -0400
++++ sc/source/filter/inc/orcusfiltersimpl.hxx  2013-06-24 19:08:23.000000000 -0400
+@@ -22,6 +22,8 @@
+     virtual bool importCSV(ScDocument& rDoc, const rtl::OUString& rPath) const;
+     virtual bool importGnumeric(ScDocument& rDoc, const rtl::OUString& rPath) const;
++    virtual bool importXLSX(ScDocument& rDoc, const rtl::OUString& rPath) const;
++    virtual bool importODS(ScDocument& rDoc, const rtl::OUString& rPath) const;
+     virtual ScOrcusXMLContext* createXMLContext(ScDocument& rDoc, const rtl::OUString& rPath) const;
+ };
+--- sc/source/filter/inc/orcusinterface.hxx    2013-06-11 05:33:38.000000000 -0400
++++ sc/source/filter/inc/orcusinterface.hxx    2013-06-24 19:08:23.000000000 -0400
+@@ -21,13 +21,26 @@
+ class ScDocument;
+ class ScOrcusSheet;
++class ScOrcusFactory;
+ class ScRangeData;
++class ScOrcusGlobalSettings : public orcus::spreadsheet::iface::import_global_settings
++{
++    ScDocument& mrDoc;
++
++public:
++    ScOrcusGlobalSettings(ScDocument& rDoc);
++
++    virtual void set_origin_date(int year, int month, int day);
++};
++
+ class ScOrcusSharedStrings : public orcus::spreadsheet::iface::import_shared_strings
+ {
+-    std::vector<OUString> maSharedStrings;
++    std::vector<OUString>& mrStrings;
+ public:
++    ScOrcusSharedStrings(std::vector<OUString>& rStrings);
++
+     virtual size_t append(const char* s, size_t n);
+     virtual size_t add(const char* s, size_t n);
+@@ -38,50 +51,49 @@
+     virtual void append_segment(const char* s, size_t n);
+     virtual size_t commit_segments();
+-
+-    const OUString& getByIndex(size_t index) const;
+-};
+-
+-class ScOrcusFactory : public orcus::spreadsheet::iface::import_factory
+-{
+-    ScDocument& mrDoc;
+-    boost::ptr_vector<ScOrcusSheet> maSheets;
+-    ScOrcusSharedStrings maSharedStrings;
+-
+-public:
+-    ScOrcusFactory(ScDocument& rDoc);
+-
+-    virtual orcus::spreadsheet::iface::import_sheet* append_sheet(const char *sheet_name, size_t sheet_name_length);
+-    virtual orcus::spreadsheet::iface::import_sheet* get_sheet(const char *sheet_name, size_t sheet_name_length);
+-    virtual orcus::spreadsheet::iface::import_shared_strings* get_shared_strings();
+-    virtual orcus::spreadsheet::iface::import_styles* get_styles();
+ };
+ class ScOrcusSheet : public orcus::spreadsheet::iface::import_sheet
+ {
+     ScDocument& mrDoc;
+     SCTAB mnTab;
+-    ScOrcusSharedStrings& mrSharedStrings;
++    ScOrcusFactory& mrFactory;
+     typedef std::map<size_t, ScRangeData*> SharedFormulaContainer;
+     SharedFormulaContainer maSharedFormulas;
+ public:
+-    ScOrcusSheet(ScDocument& rDoc, SCTAB nTab, ScOrcusSharedStrings& rSharedStrings);
++    ScOrcusSheet(ScDocument& rDoc, SCTAB nTab, ScOrcusFactory& rFactory);
+     // Orcus import interface
+     virtual void set_auto(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, const char* p, size_t n);
++    virtual void set_string(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, size_t sindex);
++    virtual void set_value(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, double value);
++    virtual void set_bool(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, bool value);
++    virtual void set_date_time(
++        orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, int year, int month, int day, int hour, int minute, double second);
++
+     virtual void set_format(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, size_t xf_index);
++
+     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);
+     virtual void set_formula_result(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, const char* p, size_t n);
++
+     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);
++
+     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);
++
+     virtual void set_shared_formula(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, size_t sindex);
+-    virtual void set_string(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, size_t sindex);
+-    virtual void set_value(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, double value);
++
++    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);
++
++    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);
+     SCTAB getIndex() const { return mnTab; }
+ };
+@@ -119,6 +131,10 @@
+     virtual void set_cell_locked(bool b);
+     virtual size_t commit_cell_protection();
++    // number format
++    virtual void set_number_format(const char* s, size_t n);
++    virtual size_t commit_number_format();
++
+     // cell style xf
+     virtual void set_cell_style_xf_count(size_t n);
+@@ -147,5 +163,38 @@
+     virtual size_t commit_cell_style();
+ };
++class ScOrcusFactory : public orcus::spreadsheet::iface::import_factory
++{
++    struct StringCellCache
++    {
++        ScAddress maPos;
++        size_t mnIndex;
++
++        StringCellCache(const ScAddress& rPos, size_t nIndex);
++    };
++
++    typedef std::vector<StringCellCache> StringCellCaches;
++
++    ScDocument& mrDoc;
++    std::vector<OUString> maStrings;
++    StringCellCaches maStringCells;
++    ScOrcusGlobalSettings maGlobalSettings;
++    ScOrcusSharedStrings maSharedStrings;
++    boost::ptr_vector<ScOrcusSheet> maSheets;
++    ScOrcusStyles maStyles;
++
++public:
++    ScOrcusFactory(ScDocument& rDoc);
++
++    virtual orcus::spreadsheet::iface::import_sheet* append_sheet(const char *sheet_name, size_t sheet_name_length);
++    virtual orcus::spreadsheet::iface::import_sheet* get_sheet(const char *sheet_name, size_t sheet_name_length);
++    virtual orcus::spreadsheet::iface::import_global_settings* get_global_settings();
++    virtual orcus::spreadsheet::iface::import_shared_strings* get_shared_strings();
++    virtual orcus::spreadsheet::iface::import_styles* get_styles();
++    virtual void finalize();
++
++    void pushStringCell(const ScAddress& rPos, size_t nStrIndex);
++};
++
+ #endif
+ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
+--- sc/source/filter/orcus/interface.cxx       2013-06-11 05:33:38.000000000 -0400
++++ sc/source/filter/orcus/interface.cxx       2013-06-24 19:08:23.000000000 -0400
+@@ -13,14 +13,34 @@
+ #include "cell.hxx"
+ #include "rangenam.hxx"
+ #include "tokenarray.hxx"
+-#include <formula/token.hxx>
++#include "stringutil.hxx"
++#include "docoptio.hxx"
++#include "formula/token.hxx"
++#include "tools/datetime.hxx"
++
++#define D_TIMEFACTOR              86400.0
+ using orcus::spreadsheet::row_t;
+ using orcus::spreadsheet::col_t;
+ using orcus::spreadsheet::formula_grammar_t;
+-ScOrcusFactory::ScOrcusFactory(ScDocument& rDoc) : mrDoc(rDoc) {}
++ScOrcusGlobalSettings::ScOrcusGlobalSettings(ScDocument& rDoc) : mrDoc(rDoc) {}
++
++void ScOrcusGlobalSettings::set_origin_date(int year, int month, int day)
++{
++    ScDocOptions aOpt = mrDoc.GetDocOptions();
++    aOpt.SetDate(year, month, day);
++    mrDoc.SetDocOptions(aOpt);
++}
++
++ScOrcusFactory::StringCellCache::StringCellCache(const ScAddress& rPos, size_t nIndex) :
++    maPos(rPos), mnIndex(nIndex) {}
++
++ScOrcusFactory::ScOrcusFactory(ScDocument& rDoc) :
++    mrDoc(rDoc),
++    maGlobalSettings(mrDoc),
++    maSharedStrings(maStrings) {}
+ orcus::spreadsheet::iface::import_sheet* ScOrcusFactory::append_sheet(const char* sheet_name, size_t sheet_name_length)
+ {
+@@ -29,7 +49,7 @@
+         return NULL;
+     SCTAB nTab = mrDoc.GetTableCount() - 1;
+-    maSheets.push_back(new ScOrcusSheet(mrDoc, nTab, maSharedStrings));
++    maSheets.push_back(new ScOrcusSheet(mrDoc, nTab, *this));
+     return &maSheets.back();
+ }
+@@ -61,10 +81,15 @@
+         return &(*it);
+     // Create a new orcus sheet instance for this.
+-    maSheets.push_back(new ScOrcusSheet(mrDoc, nTab, maSharedStrings));
++    maSheets.push_back(new ScOrcusSheet(mrDoc, nTab, *this));
+     return &maSheets.back();
+ }
++orcus::spreadsheet::iface::import_global_settings* ScOrcusFactory::get_global_settings()
++{
++    return &maGlobalSettings;
++}
++
+ orcus::spreadsheet::iface::import_shared_strings* ScOrcusFactory::get_shared_strings()
+ {
+     return &maSharedStrings;
+@@ -73,11 +98,31 @@
+ orcus::spreadsheet::iface::import_styles* ScOrcusFactory::get_styles()
+ {
+     // We don't support it yet.
+-    return new ScOrcusStyles;
++    return &maStyles;
+ }
+-ScOrcusSheet::ScOrcusSheet(ScDocument& rDoc, SCTAB nTab, ScOrcusSharedStrings& rSharedStrings) :
+-    mrDoc(rDoc), mnTab(nTab), mrSharedStrings(rSharedStrings) {}
++void ScOrcusFactory::finalize()
++{
++    ScSetStringParam aParam;
++    aParam.setTextInput();
++    StringCellCaches::const_iterator it = maStringCells.begin(), itEnd = maStringCells.end();
++    for (; it != itEnd; ++it)
++    {
++        if (it->mnIndex >= maStrings.size())
++            // String index out-of-bound!  Something is up.
++            continue;
++
++        mrDoc.SetString(it->maPos, maStrings[it->mnIndex], &aParam);
++    }
++}
++
++void ScOrcusFactory::pushStringCell(const ScAddress& rPos, size_t nStrIndex)
++{
++    maStringCells.push_back(StringCellCache(rPos, nStrIndex));
++}
++
++ScOrcusSheet::ScOrcusSheet(ScDocument& rDoc, SCTAB nTab, ScOrcusFactory& rFactory) :
++    mrDoc(rDoc), mnTab(nTab), mrFactory(rFactory) {}
+ void ScOrcusSheet::set_auto(row_t row, col_t col, const char* p, size_t n)
+ {
+@@ -85,6 +130,49 @@
+     mrDoc.SetString(col, row, mnTab, aVal);
+ }
++void ScOrcusSheet::set_string(row_t row, col_t col, size_t sindex)
++{
++    // We need to defer string cells since the shared string pool is not yet
++    // populated at the time this method is called.  Orcus imports string
++    // table after the cells get imported.  We won't need to do this once we
++    // implement true shared strings in Calc core.
++
++    mrFactory.pushStringCell(ScAddress(col, row, mnTab), sindex);
++}
++
++void ScOrcusSheet::set_value(row_t row, col_t col, double value)
++{
++    mrDoc.SetValue( col, row, mnTab, value );
++}
++
++void ScOrcusSheet::set_bool(row_t row, col_t col, bool value)
++{
++    mrDoc.SetValue(col, row, mnTab, value ? 1.0 : 0.0);
++}
++
++void ScOrcusSheet::set_date_time(
++    row_t row, col_t col, int year, int month, int day, int hour, int minute, double second)
++{
++    SvNumberFormatter* pFormatter = mrDoc.GetFormatTable();
++
++    Date aDate(day, month, year);
++    sal_uIntPtr nSec = floor(second);
++    sal_uIntPtr nSec100 = (second - nSec) * 100;
++    Time aTime(hour, minute, nSec, nSec100);
++    Date aNullDate(*pFormatter->GetNullDate());
++    long nDateDiff = aDate - aNullDate;
++
++    double fTime =
++        static_cast<double>(aTime.Get100Sec()) / 100.0 +
++        aTime.GetSec() +
++        aTime.GetMin() * 60.0 +
++        aTime.GetHour() * 3600.0;
++
++    fTime /= D_TIMEFACTOR;
++
++    mrDoc.SetValue(col, row, mnTab, nDateDiff + fTime);
++}
++
+ void ScOrcusSheet::set_format(row_t /*row*/, col_t /*col*/, size_t /*xf_index*/)
+ {
+ }
+@@ -191,45 +279,35 @@
+     mrDoc.PutCell( col, row, mnTab, pCell );
+ }
+-void ScOrcusSheet::set_string(row_t row, col_t col, size_t sindex)
++void ScOrcusSheet::set_array_formula(
++    row_t /*row*/, col_t /*col*/, formula_grammar_t /*grammar*/,
++    const char* /*p*/, size_t /*n*/, row_t /*array_rows*/, col_t /*array_cols*/)
+ {
+-    // Calc does not yet support shared strings so we have to
+-    // workaround by importing shared strings into a temporary
+-    // shared string container and writing into calc model as
+-    // normal string
+-
+-    const OUString& rSharedString = mrSharedStrings.getByIndex(sindex);
+-    ScBaseCell* pCell = ScBaseCell::CreateTextCell( rSharedString, &mrDoc );
+-    mrDoc.PutCell(col, row, mnTab, pCell);
+ }
+-void ScOrcusSheet::set_value(row_t row, col_t col, double value)
++void ScOrcusSheet::set_array_formula(
++    row_t /*row*/, col_t /*col*/, formula_grammar_t /*grammar*/,
++    const char* /*p*/, size_t /*n*/, const char* /*p_range*/, size_t /*n_range*/)
+ {
+-    mrDoc.SetValue( col, row, mnTab, value );
+ }
++ScOrcusSharedStrings::ScOrcusSharedStrings(std::vector<OUString>& rStrings) :
++    mrStrings(rStrings) {}
++
+ size_t ScOrcusSharedStrings::append(const char* s, size_t n)
+ {
+     OUString aNewString(s, n, RTL_TEXTENCODING_UTF8);
+-    maSharedStrings.push_back(aNewString);
++    mrStrings.push_back(aNewString);
+-    return maSharedStrings.size() - 1;
++    return mrStrings.size() - 1;
+ }
+ size_t ScOrcusSharedStrings::add(const char* s, size_t n)
+ {
+     OUString aNewString(s, n, RTL_TEXTENCODING_UTF8);
+-    maSharedStrings.push_back(aNewString);
+-
+-    return maSharedStrings.size() - 1;
+-}
+-
+-const OUString& ScOrcusSharedStrings::getByIndex(size_t nIndex) const
+-{
+-    if(nIndex < maSharedStrings.size())
+-        return maSharedStrings[nIndex];
++    mrStrings.push_back(aNewString);
+-    throw std::exception();
++    return mrStrings.size() - 1;
+ }
+ void ScOrcusSharedStrings::set_segment_bold(bool /*b*/)
+@@ -341,6 +419,14 @@
+     return 0;
+ }
++void ScOrcusStyles::set_number_format(const char* /*s*/, size_t /*n*/)
++{
++}
++
++size_t ScOrcusStyles::commit_number_format()
++{
++    return 0;
++}
+ // cell style xf
+--- sc/source/filter/orcus/orcusfiltersimpl.cxx        2013-06-11 05:33:38.000000000 -0400
++++ sc/source/filter/orcus/orcusfiltersimpl.cxx        2013-06-24 19:08:23.000000000 -0400
+@@ -17,6 +17,8 @@
+ #include <orcus/spreadsheet/import_interface.hpp>
+ #include <orcus/orcus_csv.hpp>
+ #include <orcus/orcus_gnumeric.hpp>
++#include <orcus/orcus_xlsx.hpp>
++#include <orcus/orcus_ods.hpp>
+ #include <orcus/global.hpp>
+ #ifdef WNT
+@@ -71,6 +73,46 @@
+     return true;
+ }
++bool ScOrcusFiltersImpl::importXLSX(ScDocument& rDoc, const rtl::OUString& rPath) const
++{
++    ScOrcusFactory aFactory(rDoc);
++    OString aSysPath = toSystemPath(rPath);
++    const char* path = aSysPath.getStr();
++
++    try
++    {
++        orcus::orcus_xlsx filter(&aFactory);
++        filter.read_file(path);
++    }
++    catch (const std::exception& e)
++    {
++        SAL_WARN("sc", "Unable to load xlsx file! " << e.what());
++        return false;
++    }
++
++    return true;
++}
++
++bool ScOrcusFiltersImpl::importODS(ScDocument& rDoc, const rtl::OUString& rPath) const
++{
++    ScOrcusFactory aFactory(rDoc);
++    OString aSysPath = toSystemPath(rPath);
++    const char* path = aSysPath.getStr();
++
++    try
++    {
++        orcus::orcus_ods filter(&aFactory);
++        filter.read_file(path);
++    }
++    catch (const std::exception& e)
++    {
++        SAL_WARN("sc", "Unable to load ods file! " << e.what());
++        return false;
++    }
++
++    return true;
++}
++
+ ScOrcusXMLContext* ScOrcusFiltersImpl::createXMLContext(ScDocument& rDoc, const rtl::OUString& rPath) const
+ {
+     return new ScOrcusXMLContextImpl(rDoc, rPath);
diff --git a/libreoffice-liborcus-build.patch b/libreoffice-liborcus-build.patch
deleted file mode 100644 (file)
index 8ddaabc..0000000
+++ /dev/null
@@ -1,1063 +0,0 @@
-From 0b1c2382e436f4a085784fd383a16cecf783d3ea Mon Sep 17 00:00:00 2001
-From: Kohei Yoshida <kohei.yoshida@gmail.com>
-Date: Mon, 8 Apr 2013 14:58:39 -0400
-Subject: [PATCH 1/9] Get it to build with the latest orcus. It may not be
- fully functional.
-
-Change-Id: Ife3c14a446273654d720eb38349cc42d1ed76893
----
- sc/source/filter/inc/orcusinterface.hxx | 18 ++++++++++++++++++
- sc/source/filter/orcus/interface.cxx    | 25 +++++++++++++++++++++++++
- sc/source/filter/orcus/xmlcontext.cxx   |  2 +-
- 3 files changed, 44 insertions(+), 1 deletion(-)
-
-diff --git a/sc/source/filter/inc/orcusinterface.hxx b/sc/source/filter/inc/orcusinterface.hxx
-index 2f8380c..4bc9b40 100644
---- a/sc/source/filter/inc/orcusinterface.hxx
-+++ b/sc/source/filter/inc/orcusinterface.hxx
-@@ -71,17 +71,31 @@ public:
-     // Orcus import interface
-     virtual void set_auto(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, const char* p, size_t n);
-     virtual void set_format(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, size_t xf_index);
-+
-     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);
-     virtual void set_formula_result(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, const char* p, size_t n);
-+
-     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);
-+
-     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);
-+
-     virtual void set_shared_formula(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, size_t sindex);
-+
-+    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);
-+
-+    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);
-+
-     virtual void set_string(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, size_t sindex);
-     virtual void set_value(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, double value);
-+    virtual void set_bool(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, bool value);
-     SCTAB getIndex() const { return mnTab; }
- };
-@@ -119,6 +133,10 @@ public:
-     virtual void set_cell_locked(bool b);
-     virtual size_t commit_cell_protection();
-+    // number format
-+    virtual void set_number_format(const char* s, size_t n);
-+    virtual size_t commit_number_format();
-+
-     // cell style xf
-     virtual void set_cell_style_xf_count(size_t n);
-diff --git a/sc/source/filter/orcus/interface.cxx b/sc/source/filter/orcus/interface.cxx
-index b21e7e5..5a7ab84 100644
---- a/sc/source/filter/orcus/interface.cxx
-+++ b/sc/source/filter/orcus/interface.cxx
-@@ -191,6 +191,18 @@ void ScOrcusSheet::set_shared_formula(row_t row, col_t col, size_t sindex)
-     mrDoc.PutCell( col, row, mnTab, pCell );
- }
-+void ScOrcusSheet::set_array_formula(
-+    row_t /*row*/, col_t /*col*/, formula_grammar_t /*grammar*/,
-+    const char* /*p*/, size_t /*n*/, row_t /*array_rows*/, col_t /*array_cols*/)
-+{
-+}
-+
-+void ScOrcusSheet::set_array_formula(
-+    row_t /*row*/, col_t /*col*/, formula_grammar_t /*grammar*/,
-+    const char* /*p*/, size_t /*n*/, const char* /*p_range*/, size_t /*n_range*/)
-+{
-+}
-+
- void ScOrcusSheet::set_string(row_t row, col_t col, size_t sindex)
- {
-     // Calc does not yet support shared strings so we have to
-@@ -208,6 +220,11 @@ void ScOrcusSheet::set_value(row_t row, col_t col, double value)
-     mrDoc.SetValue( col, row, mnTab, value );
- }
-+void ScOrcusSheet::set_bool(row_t row, col_t col, bool value)
-+{
-+    mrDoc.SetValue(col, row, mnTab, value ? 1.0 : 0.0);
-+}
-+
- size_t ScOrcusSharedStrings::append(const char* s, size_t n)
- {
-     OUString aNewString(s, n, RTL_TEXTENCODING_UTF8);
-@@ -341,6 +358,14 @@ size_t ScOrcusStyles::commit_cell_protection()
-     return 0;
- }
-+void ScOrcusStyles::set_number_format(const char* /*s*/, size_t /*n*/)
-+{
-+}
-+
-+size_t ScOrcusStyles::commit_number_format()
-+{
-+    return 0;
-+}
- // cell style xf
-diff --git a/sc/source/filter/orcus/xmlcontext.cxx b/sc/source/filter/orcus/xmlcontext.cxx
-index ecbf35b..5642382 100644
---- a/sc/source/filter/orcus/xmlcontext.cxx
-+++ b/sc/source/filter/orcus/xmlcontext.cxx
-@@ -159,7 +159,7 @@ bool ScOrcusXMLContextImpl::loadXMLStructure(SvTreeListBox& rTreeCtrl, ScOrcusXM
-     // TODO: Use our own stream loading call instead of one from orcus.
-     std::string aStrm;
--    orcus::load_file_content(path, aStrm);
-+//  orcus::load_file_content(path, aStrm);
-     if (aStrm.empty())
-         return false;
--- 
-1.8.3.rc2
-
-
-From 1b65d3db48c938288d0ab288adeefb77181aa36a Mon Sep 17 00:00:00 2001
-From: Kohei Yoshida <kohei.yoshida@gmail.com>
-Date: Mon, 8 Apr 2013 21:41:51 -0400
-Subject: [PATCH 2/9] Use ucb to load bytes from file URL.
-
-With this, we get file system abstraction for free.
-
-Change-Id: Iec988712599f506444cf9c7e3ebbd59d38f083ee
----
- sc/Library_scfilt.mk                  |  1 +
- sc/source/filter/orcus/xmlcontext.cxx | 34 +++++++++++++++++++++++++++++-----
- 2 files changed, 30 insertions(+), 5 deletions(-)
-
-diff --git a/sc/Library_scfilt.mk b/sc/Library_scfilt.mk
-index bdb99ca..0a849da 100644
---- a/sc/Library_scfilt.mk
-+++ b/sc/Library_scfilt.mk
-@@ -58,6 +58,7 @@ $(eval $(call gb_Library_use_libraries,scfilt,\
-       svxcore \
-       tk \
-       tl \
-+      ucbhelper \
-       utl \
-       vcl \
-       i18nisolang1 \
-diff --git a/sc/source/filter/orcus/xmlcontext.cxx b/sc/source/filter/orcus/xmlcontext.cxx
-index 5642382..001c8f9 100644
---- a/sc/source/filter/orcus/xmlcontext.cxx
-+++ b/sc/source/filter/orcus/xmlcontext.cxx
-@@ -14,6 +14,7 @@
- #include "svtools/treelistbox.hxx"
- #include "svtools/treelistentry.hxx"
-+#include "ucbhelper/content.hxx"
- #include <orcus/spreadsheet/import_interface.hpp>
- #include <orcus/xml_structure_tree.hpp>
-@@ -21,7 +22,14 @@
- #include <orcus/orcus_xml.hpp>
- #include <orcus/global.hpp>
-+#include <com/sun/star/ucb/XCommandEnvironment.hpp>
-+
- #include <string>
-+#include <sstream>
-+
-+#define BUFFER_SIZE 4096
-+
-+using namespace com::sun::star;
- namespace {
-@@ -143,6 +151,26 @@ public:
-     }
- };
-+void loadContentFromURL(const OUString& rURL, std::string& rStrm)
-+{
-+    ucbhelper::Content aContent(
-+        rURL, uno::Reference<ucb::XCommandEnvironment>(), comphelper::getProcessComponentContext());
-+    uno::Reference<io::XInputStream> xStrm = aContent.openStream();
-+
-+    std::ostringstream aStrmBuf;
-+    uno::Sequence<sal_Int8> aBytes;
-+    size_t nBytesRead = 0;
-+    do
-+    {
-+        nBytesRead = xStrm->readBytes(aBytes, BUFFER_SIZE);
-+        const sal_Int8* p = aBytes.getConstArray();
-+        aStrmBuf << std::string(p, p + nBytesRead);
-+    }
-+    while (nBytesRead == BUFFER_SIZE);
-+
-+    rStrm = aStrmBuf.str();
-+}
-+
- }
- ScOrcusXMLContextImpl::ScOrcusXMLContextImpl(ScDocument& rDoc, const OUString& rPath) :
-@@ -154,12 +182,8 @@ bool ScOrcusXMLContextImpl::loadXMLStructure(SvTreeListBox& rTreeCtrl, ScOrcusXM
- {
-     rParam.maUserDataStore.clear();
--    OString aSysPath = ScOrcusFiltersImpl::toSystemPath(maPath);
--    const char* path = aSysPath.getStr();
--
--    // TODO: Use our own stream loading call instead of one from orcus.
-     std::string aStrm;
--//  orcus::load_file_content(path, aStrm);
-+    loadContentFromURL(maPath, aStrm);
-     if (aStrm.empty())
-         return false;
--- 
-1.8.3.rc2
-
-
-From 0189185a3d743f8b5b29d2630b9b6d96639ab3a5 Mon Sep 17 00:00:00 2001
-From: Kohei Yoshida <kohei.yoshida@gmail.com>
-Date: Tue, 9 Apr 2013 15:36:03 -0400
-Subject: [PATCH 3/9] Manage to use orcus to import ods, xlsx, and csv.
-
-But this occasionally crashes.
-
-Change-Id: I0a18d0e210639b43b89b966a54de541b9a43e329
-
-Conflicts:
-       framework/source/loadenv/loadenv.cxx
-       sc/source/filter/inc/orcusfiltersimpl.hxx
-       sc/source/filter/orcus/orcusfiltersimpl.cxx
-       sc/source/ui/inc/docsh.hxx
-       sfx2/inc/sfx2/docfilt.hxx
-       sfx2/inc/sfx2/objsh.hxx
-       sfx2/source/doc/docfile.cxx
-       sfx2/source/doc/docfilt.cxx
----
- sc/inc/orcusfilters.hxx                     |  4 +++
- sc/source/filter/inc/orcusfiltersimpl.hxx   |  2 ++
- sc/source/filter/orcus/orcusfiltersimpl.cxx | 42 +++++++++++++++++++++++++++++
- 3 files changed, 48 insertions(+)
-
-diff --git a/sc/inc/orcusfilters.hxx b/sc/inc/orcusfilters.hxx
-index 22e9cc9..99c1b34 100644
---- a/sc/inc/orcusfilters.hxx
-+++ b/sc/inc/orcusfilters.hxx
-@@ -30,6 +30,10 @@ public:
-     virtual bool importGnumeric(ScDocument& rDoc, const rtl::OUString& rPath) const = 0;
-+    virtual bool importXLSX(ScDocument& rDoc, const rtl::OUString& rPath) const = 0;
-+
-+    virtual bool importODS(ScDocument& rDoc, const rtl::OUString& rPath) const = 0;
-+
-     /**
-      * Create a context for XML file.  The context object stores session
-      * information for each unique XML file.  You must create a new context
-diff --git a/sc/source/filter/inc/orcusfiltersimpl.hxx b/sc/source/filter/inc/orcusfiltersimpl.hxx
-index a97a50c..e54e4cb 100644
---- a/sc/source/filter/inc/orcusfiltersimpl.hxx
-+++ b/sc/source/filter/inc/orcusfiltersimpl.hxx
-@@ -22,6 +22,8 @@ public:
-     virtual bool importCSV(ScDocument& rDoc, const rtl::OUString& rPath) const;
-     virtual bool importGnumeric(ScDocument& rDoc, const rtl::OUString& rPath) const;
-+    virtual bool importXLSX(ScDocument& rDoc, const rtl::OUString& rPath) const;
-+    virtual bool importODS(ScDocument& rDoc, const rtl::OUString& rPath) const;
-     virtual ScOrcusXMLContext* createXMLContext(ScDocument& rDoc, const rtl::OUString& rPath) const;
- };
-diff --git a/sc/source/filter/orcus/orcusfiltersimpl.cxx b/sc/source/filter/orcus/orcusfiltersimpl.cxx
-index ed33cc1..25b8267 100644
---- a/sc/source/filter/orcus/orcusfiltersimpl.cxx
-+++ b/sc/source/filter/orcus/orcusfiltersimpl.cxx
-@@ -17,6 +17,8 @@
- #include <orcus/spreadsheet/import_interface.hpp>
- #include <orcus/orcus_csv.hpp>
- #include <orcus/orcus_gnumeric.hpp>
-+#include <orcus/orcus_xlsx.hpp>
-+#include <orcus/orcus_ods.hpp>
- #include <orcus/global.hpp>
- #ifdef WNT
-@@ -71,6 +73,46 @@ bool ScOrcusFiltersImpl::importGnumeric(ScDocument& rDoc, const OUString& rPath)
-     return true;
- }
-+bool ScOrcusFiltersImpl::importXLSX(ScDocument& rDoc, const rtl::OUString& rPath) const
-+{
-+    ScOrcusFactory aFactory(rDoc);
-+    OString aSysPath = toSystemPath(rPath);
-+    const char* path = aSysPath.getStr();
-+
-+    try
-+    {
-+        orcus::orcus_xlsx filter(&aFactory);
-+        filter.read_file(path);
-+    }
-+    catch (const std::exception& e)
-+    {
-+        SAL_WARN("sc", "Unable to load xlsx file! " << e.what());
-+        return false;
-+    }
-+
-+    return true;
-+}
-+
-+bool ScOrcusFiltersImpl::importODS(ScDocument& rDoc, const rtl::OUString& rPath) const
-+{
-+    ScOrcusFactory aFactory(rDoc);
-+    OString aSysPath = toSystemPath(rPath);
-+    const char* path = aSysPath.getStr();
-+
-+    try
-+    {
-+        orcus::orcus_ods filter(&aFactory);
-+        filter.read_file(path);
-+    }
-+    catch (const std::exception& e)
-+    {
-+        SAL_WARN("sc", "Unable to load ods file! " << e.what());
-+        return false;
-+    }
-+
-+    return true;
-+}
-+
- ScOrcusXMLContext* ScOrcusFiltersImpl::createXMLContext(ScDocument& rDoc, const rtl::OUString& rPath) const
- {
-     return new ScOrcusXMLContextImpl(rDoc, rPath);
--- 
-1.8.3.rc2
-
-
-From 20e36f8c360bd964f7a9b61fbe1292d1e29808bf Mon Sep 17 00:00:00 2001
-From: Kohei Yoshida <kohei.yoshida@gmail.com>
-Date: Tue, 9 Apr 2013 16:14:40 -0400
-Subject: [PATCH 4/9] Try not to crash during import of xlsx and ods documents.
-
-Also, let's not leak memory by returning a new'ed instance from get_styles().
-Orcus never manages the life cycle of objects returned from client code.
-
-Change-Id: Id92eb10dbe88c2a55b5d04e408a01fa9c25fa9a1
----
- sc/source/filter/inc/orcusinterface.hxx | 31 ++++++++++++++++---------------
- sc/source/filter/orcus/interface.cxx    |  4 ++--
- 2 files changed, 18 insertions(+), 17 deletions(-)
-
-diff --git a/sc/source/filter/inc/orcusinterface.hxx b/sc/source/filter/inc/orcusinterface.hxx
-index 4bc9b40..0de1fcc 100644
---- a/sc/source/filter/inc/orcusinterface.hxx
-+++ b/sc/source/filter/inc/orcusinterface.hxx
-@@ -42,21 +42,6 @@ public:
-     const OUString& getByIndex(size_t index) const;
- };
--class ScOrcusFactory : public orcus::spreadsheet::iface::import_factory
--{
--    ScDocument& mrDoc;
--    boost::ptr_vector<ScOrcusSheet> maSheets;
--    ScOrcusSharedStrings maSharedStrings;
--
--public:
--    ScOrcusFactory(ScDocument& rDoc);
--
--    virtual orcus::spreadsheet::iface::import_sheet* append_sheet(const char *sheet_name, size_t sheet_name_length);
--    virtual orcus::spreadsheet::iface::import_sheet* get_sheet(const char *sheet_name, size_t sheet_name_length);
--    virtual orcus::spreadsheet::iface::import_shared_strings* get_shared_strings();
--    virtual orcus::spreadsheet::iface::import_styles* get_styles();
--};
--
- class ScOrcusSheet : public orcus::spreadsheet::iface::import_sheet
- {
-     ScDocument& mrDoc;
-@@ -165,5 +150,21 @@ public:
-     virtual size_t commit_cell_style();
- };
-+class ScOrcusFactory : public orcus::spreadsheet::iface::import_factory
-+{
-+    ScDocument& mrDoc;
-+    boost::ptr_vector<ScOrcusSheet> maSheets;
-+    ScOrcusSharedStrings maSharedStrings;
-+    ScOrcusStyles maStyles;
-+
-+public:
-+    ScOrcusFactory(ScDocument& rDoc);
-+
-+    virtual orcus::spreadsheet::iface::import_sheet* append_sheet(const char *sheet_name, size_t sheet_name_length);
-+    virtual orcus::spreadsheet::iface::import_sheet* get_sheet(const char *sheet_name, size_t sheet_name_length);
-+    virtual orcus::spreadsheet::iface::import_shared_strings* get_shared_strings();
-+    virtual orcus::spreadsheet::iface::import_styles* get_styles();
-+};
-+
- #endif
- /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
-diff --git a/sc/source/filter/orcus/interface.cxx b/sc/source/filter/orcus/interface.cxx
-index 5a7ab84..6e1391b 100644
---- a/sc/source/filter/orcus/interface.cxx
-+++ b/sc/source/filter/orcus/interface.cxx
-@@ -73,7 +73,7 @@ orcus::spreadsheet::iface::import_shared_strings* ScOrcusFactory::get_shared_str
- orcus::spreadsheet::iface::import_styles* ScOrcusFactory::get_styles()
- {
-     // We don't support it yet.
--    return new ScOrcusStyles;
-+    return &maStyles;
- }
- ScOrcusSheet::ScOrcusSheet(ScDocument& rDoc, SCTAB nTab, ScOrcusSharedStrings& rSharedStrings) :
-@@ -246,7 +246,7 @@ const OUString& ScOrcusSharedStrings::getByIndex(size_t nIndex) const
-     if(nIndex < maSharedStrings.size())
-         return maSharedStrings[nIndex];
--    throw std::exception();
-+    return EMPTY_OUSTRING;
- }
- void ScOrcusSharedStrings::set_segment_bold(bool /*b*/)
--- 
-1.8.3.rc2
-
-
-From f3fb0bd26a8707fb5c5b6dd43ac23b726c11c434 Mon Sep 17 00:00:00 2001
-From: Kohei Yoshida <kohei.yoshida@gmail.com>
-Date: Tue, 9 Apr 2013 19:17:03 -0400
-Subject: [PATCH 5/9] Defer string cell import until the end when importing via
- orcus.
-
-This is because orcus imports cells before it imports the string table.
-
-Change-Id: I1b85be2d9832b9a9a52961ece735de8cd980b893
-
-Conflicts:
-       sc/source/filter/orcus/interface.cxx
----
- sc/inc/document.hxx                     |  1 +
- sc/source/core/data/document.cxx        |  6 +++
- sc/source/filter/inc/orcusinterface.hxx | 28 +++++++++++---
- sc/source/filter/orcus/interface.cxx    | 67 +++++++++++++++++++++------------
- 4 files changed, 71 insertions(+), 31 deletions(-)
-
-diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx
-index 31c5ac2..0b97341 100644
---- a/sc/inc/document.hxx
-+++ b/sc/inc/document.hxx
-@@ -750,6 +750,7 @@ public:
-     SC_DLLPUBLIC bool           SetString(
-         SCCOL nCol, SCROW nRow, SCTAB nTab, const rtl::OUString& rString,
-         ScSetStringParam* pParam = NULL );
-+    SC_DLLPUBLIC bool SetString( const ScAddress& rPos, const OUString& rString, ScSetStringParam* pParam = NULL );
-     SC_DLLPUBLIC void           SetValue( SCCOL nCol, SCROW nRow, SCTAB nTab, const double& rVal );
-     void            SetError( SCCOL nCol, SCROW nRow, SCTAB nTab, const sal_uInt16 nError);
-diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx
-index 8cc1713..66af3d2 100644
---- a/sc/source/core/data/document.cxx
-+++ b/sc/source/core/data/document.cxx
-@@ -2940,6 +2940,12 @@ bool ScDocument::SetString( SCCOL nCol, SCROW nRow, SCTAB nTab, const rtl::OUStr
-         return false;
- }
-+bool ScDocument::SetString(
-+    const ScAddress& rPos, const OUString& rString, ScSetStringParam* pParam )
-+{
-+    return SetString(rPos.Col(), rPos.Row(), rPos.Tab(), rString, pParam);
-+}
-+
- void ScDocument::SetValue( SCCOL nCol, SCROW nRow, SCTAB nTab, const double& rVal )
- {
-diff --git a/sc/source/filter/inc/orcusinterface.hxx b/sc/source/filter/inc/orcusinterface.hxx
-index 0de1fcc..313331c 100644
---- a/sc/source/filter/inc/orcusinterface.hxx
-+++ b/sc/source/filter/inc/orcusinterface.hxx
-@@ -21,13 +21,16 @@
- class ScDocument;
- class ScOrcusSheet;
-+class ScOrcusFactory;
- class ScRangeData;
- class ScOrcusSharedStrings : public orcus::spreadsheet::iface::import_shared_strings
- {
--    std::vector<OUString> maSharedStrings;
-+    std::vector<OUString>& mrStrings;
- public:
-+    ScOrcusSharedStrings(std::vector<OUString>& rStrings);
-+
-     virtual size_t append(const char* s, size_t n);
-     virtual size_t add(const char* s, size_t n);
-@@ -38,20 +41,18 @@ public:
-     virtual void append_segment(const char* s, size_t n);
-     virtual size_t commit_segments();
--
--    const OUString& getByIndex(size_t index) const;
- };
- class ScOrcusSheet : public orcus::spreadsheet::iface::import_sheet
- {
-     ScDocument& mrDoc;
-     SCTAB mnTab;
--    ScOrcusSharedStrings& mrSharedStrings;
-+    ScOrcusFactory& mrFactory;
-     typedef std::map<size_t, ScRangeData*> SharedFormulaContainer;
-     SharedFormulaContainer maSharedFormulas;
- public:
--    ScOrcusSheet(ScDocument& rDoc, SCTAB nTab, ScOrcusSharedStrings& rSharedStrings);
-+    ScOrcusSheet(ScDocument& rDoc, SCTAB nTab, ScOrcusFactory& rFactory);
-     // Orcus import interface
-     virtual void set_auto(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, const char* p, size_t n);
-@@ -152,9 +153,21 @@ public:
- class ScOrcusFactory : public orcus::spreadsheet::iface::import_factory
- {
-+    struct StringCellCache
-+    {
-+        ScAddress maPos;
-+        size_t mnIndex;
-+
-+        StringCellCache(const ScAddress& rPos, size_t nIndex);
-+    };
-+
-+    typedef std::vector<StringCellCache> StringCellCaches;
-+
-     ScDocument& mrDoc;
--    boost::ptr_vector<ScOrcusSheet> maSheets;
-+    std::vector<OUString> maStrings;
-+    StringCellCaches maStringCells;
-     ScOrcusSharedStrings maSharedStrings;
-+    boost::ptr_vector<ScOrcusSheet> maSheets;
-     ScOrcusStyles maStyles;
- public:
-@@ -164,6 +177,9 @@ public:
-     virtual orcus::spreadsheet::iface::import_sheet* get_sheet(const char *sheet_name, size_t sheet_name_length);
-     virtual orcus::spreadsheet::iface::import_shared_strings* get_shared_strings();
-     virtual orcus::spreadsheet::iface::import_styles* get_styles();
-+    virtual void finalize();
-+
-+    void pushStringCell(const ScAddress& rPos, size_t nStrIndex);
- };
- #endif
-diff --git a/sc/source/filter/orcus/interface.cxx b/sc/source/filter/orcus/interface.cxx
-index 6e1391b..d46c1f7 100644
---- a/sc/source/filter/orcus/interface.cxx
-+++ b/sc/source/filter/orcus/interface.cxx
-@@ -13,14 +13,18 @@
- #include "cell.hxx"
- #include "rangenam.hxx"
- #include "tokenarray.hxx"
--#include <formula/token.hxx>
-+#include "stringutil.hxx"
-+#include <formula/token.hxx>
- using orcus::spreadsheet::row_t;
- using orcus::spreadsheet::col_t;
- using orcus::spreadsheet::formula_grammar_t;
--ScOrcusFactory::ScOrcusFactory(ScDocument& rDoc) : mrDoc(rDoc) {}
-+ScOrcusFactory::StringCellCache::StringCellCache(const ScAddress& rPos, size_t nIndex) :
-+    maPos(rPos), mnIndex(nIndex) {}
-+
-+ScOrcusFactory::ScOrcusFactory(ScDocument& rDoc) : mrDoc(rDoc), maSharedStrings(maStrings) {}
- orcus::spreadsheet::iface::import_sheet* ScOrcusFactory::append_sheet(const char* sheet_name, size_t sheet_name_length)
- {
-@@ -29,7 +33,7 @@ orcus::spreadsheet::iface::import_sheet* ScOrcusFactory::append_sheet(const char
-         return NULL;
-     SCTAB nTab = mrDoc.GetTableCount() - 1;
--    maSheets.push_back(new ScOrcusSheet(mrDoc, nTab, maSharedStrings));
-+    maSheets.push_back(new ScOrcusSheet(mrDoc, nTab, *this));
-     return &maSheets.back();
- }
-@@ -61,7 +65,7 @@ orcus::spreadsheet::iface::import_sheet* ScOrcusFactory::get_sheet(const char* s
-         return &(*it);
-     // Create a new orcus sheet instance for this.
--    maSheets.push_back(new ScOrcusSheet(mrDoc, nTab, maSharedStrings));
-+    maSheets.push_back(new ScOrcusSheet(mrDoc, nTab, *this));
-     return &maSheets.back();
- }
-@@ -76,8 +80,28 @@ orcus::spreadsheet::iface::import_styles* ScOrcusFactory::get_styles()
-     return &maStyles;
- }
--ScOrcusSheet::ScOrcusSheet(ScDocument& rDoc, SCTAB nTab, ScOrcusSharedStrings& rSharedStrings) :
--    mrDoc(rDoc), mnTab(nTab), mrSharedStrings(rSharedStrings) {}
-+void ScOrcusFactory::finalize()
-+{
-+    ScSetStringParam aParam;
-+    aParam.setTextInput();
-+    StringCellCaches::const_iterator it = maStringCells.begin(), itEnd = maStringCells.end();
-+    for (; it != itEnd; ++it)
-+    {
-+        if (it->mnIndex >= maStrings.size())
-+            // String index out-of-bound!  Something is up.
-+            continue;
-+
-+        mrDoc.SetString(it->maPos, maStrings[it->mnIndex], &aParam);
-+    }
-+}
-+
-+void ScOrcusFactory::pushStringCell(const ScAddress& rPos, size_t nStrIndex)
-+{
-+    maStringCells.push_back(StringCellCache(rPos, nStrIndex));
-+}
-+
-+ScOrcusSheet::ScOrcusSheet(ScDocument& rDoc, SCTAB nTab, ScOrcusFactory& rFactory) :
-+    mrDoc(rDoc), mnTab(nTab), mrFactory(rFactory) {}
- void ScOrcusSheet::set_auto(row_t row, col_t col, const char* p, size_t n)
- {
-@@ -205,14 +229,12 @@ void ScOrcusSheet::set_array_formula(
- void ScOrcusSheet::set_string(row_t row, col_t col, size_t sindex)
- {
--    // Calc does not yet support shared strings so we have to
--    // workaround by importing shared strings into a temporary
--    // shared string container and writing into calc model as
--    // normal string
-+    // We need to defer string cells since the shared string pool is not yet
-+    // populated at the time this method is called.  Orcus imports string
-+    // table after the cells get imported.  We won't need to do this once we
-+    // implement true shared strings in Calc core.
--    const OUString& rSharedString = mrSharedStrings.getByIndex(sindex);
--    ScBaseCell* pCell = ScBaseCell::CreateTextCell( rSharedString, &mrDoc );
--    mrDoc.PutCell(col, row, mnTab, pCell);
-+    mrFactory.pushStringCell(ScAddress(col, row, mnTab), sindex);
- }
- void ScOrcusSheet::set_value(row_t row, col_t col, double value)
-@@ -225,28 +247,23 @@ void ScOrcusSheet::set_bool(row_t row, col_t col, bool value)
-     mrDoc.SetValue(col, row, mnTab, value ? 1.0 : 0.0);
- }
-+ScOrcusSharedStrings::ScOrcusSharedStrings(std::vector<OUString>& rStrings) :
-+    mrStrings(rStrings) {}
-+
- size_t ScOrcusSharedStrings::append(const char* s, size_t n)
- {
-     OUString aNewString(s, n, RTL_TEXTENCODING_UTF8);
--    maSharedStrings.push_back(aNewString);
-+    mrStrings.push_back(aNewString);
--    return maSharedStrings.size() - 1;
-+    return mrStrings.size() - 1;
- }
- size_t ScOrcusSharedStrings::add(const char* s, size_t n)
- {
-     OUString aNewString(s, n, RTL_TEXTENCODING_UTF8);
--    maSharedStrings.push_back(aNewString);
--
--    return maSharedStrings.size() - 1;
--}
--
--const OUString& ScOrcusSharedStrings::getByIndex(size_t nIndex) const
--{
--    if(nIndex < maSharedStrings.size())
--        return maSharedStrings[nIndex];
-+    mrStrings.push_back(aNewString);
--    return EMPTY_OUSTRING;
-+    return mrStrings.size() - 1;
- }
- void ScOrcusSharedStrings::set_segment_bold(bool /*b*/)
--- 
-1.8.3.rc2
-
-
-From 0f543ee074f046f3ca0765079a158a11b1391499 Mon Sep 17 00:00:00 2001
-From: Kohei Yoshida <kohei.yoshida@gmail.com>
-Date: Wed, 20 Mar 2013 10:16:10 -0400
-Subject: [PATCH 6/9] Add convenience methods to set maximum text input and
- numeric input modes.
-
-And remove one use of ScDocument::PutCell().
-
-Change-Id: Iaa3c115794894964cb7c9f809235cdb7669be094
-
-Conflicts:
-       sc/inc/stringutil.hxx
-       sc/source/core/data/dbdocutl.cxx
-       sc/source/core/data/document.cxx
-       sc/source/filter/dif/difimp.cxx
-       sc/source/filter/excel/xihelper.cxx
-       sc/source/filter/xml/xmlcelli.cxx
----
- sc/inc/stringutil.hxx              | 22 ++++++++++++++++------
- sc/source/core/tool/stringutil.cxx | 14 ++++++++++++++
- 2 files changed, 30 insertions(+), 6 deletions(-)
-
-diff --git a/sc/inc/stringutil.hxx b/sc/inc/stringutil.hxx
-index 48c94f5..f3dcf59 100644
---- a/sc/inc/stringutil.hxx
-+++ b/sc/inc/stringutil.hxx
-@@ -72,16 +72,26 @@ struct SC_DLLPUBLIC ScSetStringParam
-     TextFormatPolicy meSetTextNumFormat;
-     /**
--     * When true, treat input with a leading apostrophe / single quote special
--     * in that it escapes numeric or date/time input such that it is not
--     * interpreted and the input string is taken instead. This can be used
--     * during text file import so the leading apostrophe is not lost if it
--     * precedes a numeric value.
--     * Usually set mbHandleApostrophe = !mbSetTextCellFormat
-+     * When true, treat input with a leading apostrophe as an escape character
-+     * for a numeric value content, to treat the numeric value as a text. When
-+     * false, the whole string input including the leading apostrophe will be
-+     * entered literally as string.
-      */
-     bool mbHandleApostrophe;
-     ScSetStringParam();
-+
-+    /**
-+     * Call this whenever you need to unconditionally set input as text, no
-+     * matter what the input is.
-+     */
-+    void setTextInput();
-+
-+    /**
-+     * Call this whenever you need to maximize the chance of input being
-+     * detected as a numeric value (numbers, dates, times etc).
-+     */
-+    void setNumericInput();
- };
- // ============================================================================
-diff --git a/sc/source/core/tool/stringutil.cxx b/sc/source/core/tool/stringutil.cxx
-index 62e4804..2e65416 100644
---- a/sc/source/core/tool/stringutil.cxx
-+++ b/sc/source/core/tool/stringutil.cxx
-@@ -32,6 +32,20 @@ ScSetStringParam::ScSetStringParam() :
- {
- }
-+void ScSetStringParam::setTextInput()
-+{
-+    mbDetectNumberFormat = false;
-+    mbHandleApostrophe = false;
-+    meSetTextNumFormat = Always;
-+}
-+
-+void ScSetStringParam::setNumericInput()
-+{
-+    mbDetectNumberFormat = true;
-+    mbHandleApostrophe = true;
-+    meSetTextNumFormat = Never;
-+}
-+
- // ============================================================================-
- bool ScStringUtil::parseSimpleNumber(
--- 
-1.8.3.rc2
-
-
-From 165d7c63887217a244d6f7928f8a362dd9631a03 Mon Sep 17 00:00:00 2001
-From: Kohei Yoshida <kohei.yoshida@gmail.com>
-Date: Tue, 9 Apr 2013 22:36:58 -0400
-Subject: [PATCH 7/9] Implement set_date() interface method.
-
-It'll simply call set_auto() for now.
-
-Change-Id: I580b2ecbd34ffe7674f64ade912877ef07a60aca
-
-Conflicts:
-       sc/source/filter/orcus/interface.cxx
----
- sc/source/filter/inc/orcusinterface.hxx |  9 ++++---
- sc/source/filter/orcus/interface.cxx    | 45 ++++++++++++++++++---------------
- 2 files changed, 30 insertions(+), 24 deletions(-)
-
-diff --git a/sc/source/filter/inc/orcusinterface.hxx b/sc/source/filter/inc/orcusinterface.hxx
-index 313331c..3604da5 100644
---- a/sc/source/filter/inc/orcusinterface.hxx
-+++ b/sc/source/filter/inc/orcusinterface.hxx
-@@ -56,6 +56,11 @@ public:
-     // Orcus import interface
-     virtual void set_auto(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, const char* p, size_t n);
-+    virtual void set_string(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, size_t sindex);
-+    virtual void set_value(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, double value);
-+    virtual void set_bool(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, bool value);
-+    virtual void set_date(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, const char* p, size_t n);
-+
-     virtual void set_format(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, size_t xf_index);
-     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);
-@@ -79,10 +84,6 @@ public:
-         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);
--    virtual void set_string(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, size_t sindex);
--    virtual void set_value(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, double value);
--    virtual void set_bool(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, bool value);
--
-     SCTAB getIndex() const { return mnTab; }
- };
-diff --git a/sc/source/filter/orcus/interface.cxx b/sc/source/filter/orcus/interface.cxx
-index d46c1f7..2f8b097 100644
---- a/sc/source/filter/orcus/interface.cxx
-+++ b/sc/source/filter/orcus/interface.cxx
-@@ -109,6 +109,31 @@ void ScOrcusSheet::set_auto(row_t row, col_t col, const char* p, size_t n)
-     mrDoc.SetString(col, row, mnTab, aVal);
- }
-+void ScOrcusSheet::set_string(row_t row, col_t col, size_t sindex)
-+{
-+    // We need to defer string cells since the shared string pool is not yet
-+    // populated at the time this method is called.  Orcus imports string
-+    // table after the cells get imported.  We won't need to do this once we
-+    // implement true shared strings in Calc core.
-+
-+    mrFactory.pushStringCell(ScAddress(col, row, mnTab), sindex);
-+}
-+
-+void ScOrcusSheet::set_value(row_t row, col_t col, double value)
-+{
-+    mrDoc.SetValue( col, row, mnTab, value );
-+}
-+
-+void ScOrcusSheet::set_bool(row_t row, col_t col, bool value)
-+{
-+    mrDoc.SetValue(col, row, mnTab, value ? 1.0 : 0.0);
-+}
-+
-+void ScOrcusSheet::set_date(row_t row, col_t col, const char* p, size_t n)
-+{
-+    set_auto(row, col, p, n);
-+}
-+
- void ScOrcusSheet::set_format(row_t /*row*/, col_t /*col*/, size_t /*xf_index*/)
- {
- }
-@@ -227,26 +252,6 @@ void ScOrcusSheet::set_array_formula(
- {
- }
--void ScOrcusSheet::set_string(row_t row, col_t col, size_t sindex)
--{
--    // We need to defer string cells since the shared string pool is not yet
--    // populated at the time this method is called.  Orcus imports string
--    // table after the cells get imported.  We won't need to do this once we
--    // implement true shared strings in Calc core.
--
--    mrFactory.pushStringCell(ScAddress(col, row, mnTab), sindex);
--}
--
--void ScOrcusSheet::set_value(row_t row, col_t col, double value)
--{
--    mrDoc.SetValue( col, row, mnTab, value );
--}
--
--void ScOrcusSheet::set_bool(row_t row, col_t col, bool value)
--{
--    mrDoc.SetValue(col, row, mnTab, value ? 1.0 : 0.0);
--}
--
- ScOrcusSharedStrings::ScOrcusSharedStrings(std::vector<OUString>& rStrings) :
-     mrStrings(rStrings) {}
--- 
-1.8.3.rc2
-
-
-From ce2bae5773fa82dee81d0c41fd7b1ad0eb792b98 Mon Sep 17 00:00:00 2001
-From: Kohei Yoshida <kohei.yoshida@gmail.com>
-Date: Wed, 10 Apr 2013 15:03:12 -0400
-Subject: [PATCH 8/9] Properly implement date / time value import from orcus.
-
-Change-Id: Icaf310182dcdd2a5d06c2d4bcbb98e3850fb2d80
----
- sc/source/filter/inc/orcusinterface.hxx |  3 ++-
- sc/source/filter/orcus/interface.cxx    | 27 ++++++++++++++++++++++++---
- 2 files changed, 26 insertions(+), 4 deletions(-)
-
-diff --git a/sc/source/filter/inc/orcusinterface.hxx b/sc/source/filter/inc/orcusinterface.hxx
-index 3604da5..acdd450 100644
---- a/sc/source/filter/inc/orcusinterface.hxx
-+++ b/sc/source/filter/inc/orcusinterface.hxx
-@@ -59,7 +59,8 @@ public:
-     virtual void set_string(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, size_t sindex);
-     virtual void set_value(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, double value);
-     virtual void set_bool(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, bool value);
--    virtual void set_date(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, const char* p, size_t n);
-+    virtual void set_date_time(
-+        orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, int year, int month, int day, int hour, int minute, double second);
-     virtual void set_format(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, size_t xf_index);
-diff --git a/sc/source/filter/orcus/interface.cxx b/sc/source/filter/orcus/interface.cxx
-index 2f8b097..d5a673b 100644
---- a/sc/source/filter/orcus/interface.cxx
-+++ b/sc/source/filter/orcus/interface.cxx
-@@ -15,7 +15,10 @@
- #include "tokenarray.hxx"
- #include "stringutil.hxx"
--#include <formula/token.hxx>
-+#include "formula/token.hxx"
-+#include "tools/datetime.hxx"
-+
-+#define D_TIMEFACTOR              86400.0
- using orcus::spreadsheet::row_t;
- using orcus::spreadsheet::col_t;
-@@ -129,9 +132,27 @@ void ScOrcusSheet::set_bool(row_t row, col_t col, bool value)
-     mrDoc.SetValue(col, row, mnTab, value ? 1.0 : 0.0);
- }
--void ScOrcusSheet::set_date(row_t row, col_t col, const char* p, size_t n)
-+void ScOrcusSheet::set_date_time(
-+    row_t row, col_t col, int year, int month, int day, int hour, int minute, double second)
- {
--    set_auto(row, col, p, n);
-+    SvNumberFormatter* pFormatter = mrDoc.GetFormatTable();
-+
-+    Date aDate(day, month, year);
-+    sal_uIntPtr nSec = floor(second);
-+    sal_uIntPtr nSec100 = (second - nSec) * 100;
-+    Time aTime(hour, minute, nSec, nSec100);
-+    Date aNullDate(*pFormatter->GetNullDate());
-+    long nDateDiff = aDate - aNullDate;
-+
-+    double fTime =
-+        static_cast<double>(aTime.Get100Sec()) / 100.0 +
-+        aTime.GetSec() +
-+        aTime.GetMin() * 60.0 +
-+        aTime.GetHour() * 3600.0;
-+
-+    fTime /= D_TIMEFACTOR;
-+
-+    mrDoc.SetValue(col, row, mnTab, nDateDiff + fTime);
- }
- void ScOrcusSheet::set_format(row_t /*row*/, col_t /*col*/, size_t /*xf_index*/)
--- 
-1.8.3.rc2
-
-
-From 60e741a076e343656ff6edc6b87fe8bb1a77d700 Mon Sep 17 00:00:00 2001
-From: Kohei Yoshida <kohei.yoshida@gmail.com>
-Date: Wed, 10 Apr 2013 21:04:38 -0400
-Subject: [PATCH 9/9] Import null date via orcus.
-
-Change-Id: Ifa50e460768ffff4b1096d795ab694fea62a6c29
-
-Conflicts:
-       sc/source/filter/orcus/interface.cxx
----
- sc/source/filter/inc/orcusinterface.hxx | 12 ++++++++++++
- sc/source/filter/orcus/interface.cxx    | 20 +++++++++++++++++++-
- 2 files changed, 31 insertions(+), 1 deletion(-)
-
-diff --git a/sc/source/filter/inc/orcusinterface.hxx b/sc/source/filter/inc/orcusinterface.hxx
-index acdd450..d6363d8 100644
---- a/sc/source/filter/inc/orcusinterface.hxx
-+++ b/sc/source/filter/inc/orcusinterface.hxx
-@@ -24,6 +24,16 @@ class ScOrcusSheet;
- class ScOrcusFactory;
- class ScRangeData;
-+class ScOrcusGlobalSettings : public orcus::spreadsheet::iface::import_global_settings
-+{
-+    ScDocument& mrDoc;
-+
-+public:
-+    ScOrcusGlobalSettings(ScDocument& rDoc);
-+
-+    virtual void set_origin_date(int year, int month, int day);
-+};
-+
- class ScOrcusSharedStrings : public orcus::spreadsheet::iface::import_shared_strings
- {
-     std::vector<OUString>& mrStrings;
-@@ -168,6 +178,7 @@ class ScOrcusFactory : public orcus::spreadsheet::iface::import_factory
-     ScDocument& mrDoc;
-     std::vector<OUString> maStrings;
-     StringCellCaches maStringCells;
-+    ScOrcusGlobalSettings maGlobalSettings;
-     ScOrcusSharedStrings maSharedStrings;
-     boost::ptr_vector<ScOrcusSheet> maSheets;
-     ScOrcusStyles maStyles;
-@@ -177,6 +188,7 @@ public:
-     virtual orcus::spreadsheet::iface::import_sheet* append_sheet(const char *sheet_name, size_t sheet_name_length);
-     virtual orcus::spreadsheet::iface::import_sheet* get_sheet(const char *sheet_name, size_t sheet_name_length);
-+    virtual orcus::spreadsheet::iface::import_global_settings* get_global_settings();
-     virtual orcus::spreadsheet::iface::import_shared_strings* get_shared_strings();
-     virtual orcus::spreadsheet::iface::import_styles* get_styles();
-     virtual void finalize();
-diff --git a/sc/source/filter/orcus/interface.cxx b/sc/source/filter/orcus/interface.cxx
-index d5a673b..0acc22e 100644
---- a/sc/source/filter/orcus/interface.cxx
-+++ b/sc/source/filter/orcus/interface.cxx
-@@ -14,6 +14,7 @@
- #include "rangenam.hxx"
- #include "tokenarray.hxx"
- #include "stringutil.hxx"
-+#include "docoptio.hxx"
- #include "formula/token.hxx"
- #include "tools/datetime.hxx"
-@@ -24,10 +25,22 @@ using orcus::spreadsheet::row_t;
- using orcus::spreadsheet::col_t;
- using orcus::spreadsheet::formula_grammar_t;
-+ScOrcusGlobalSettings::ScOrcusGlobalSettings(ScDocument& rDoc) : mrDoc(rDoc) {}
-+
-+void ScOrcusGlobalSettings::set_origin_date(int year, int month, int day)
-+{
-+    ScDocOptions aOpt = mrDoc.GetDocOptions();
-+    aOpt.SetDate(year, month, day);
-+    mrDoc.SetDocOptions(aOpt);
-+}
-+
- ScOrcusFactory::StringCellCache::StringCellCache(const ScAddress& rPos, size_t nIndex) :
-     maPos(rPos), mnIndex(nIndex) {}
--ScOrcusFactory::ScOrcusFactory(ScDocument& rDoc) : mrDoc(rDoc), maSharedStrings(maStrings) {}
-+ScOrcusFactory::ScOrcusFactory(ScDocument& rDoc) :
-+    mrDoc(rDoc),
-+    maGlobalSettings(mrDoc),
-+    maSharedStrings(maStrings) {}
- orcus::spreadsheet::iface::import_sheet* ScOrcusFactory::append_sheet(const char* sheet_name, size_t sheet_name_length)
- {
-@@ -72,6 +85,11 @@ orcus::spreadsheet::iface::import_sheet* ScOrcusFactory::get_sheet(const char* s
-     return &maSheets.back();
- }
-+orcus::spreadsheet::iface::import_global_settings* ScOrcusFactory::get_global_settings()
-+{
-+    return &maGlobalSettings;
-+}
-+
- orcus::spreadsheet::iface::import_shared_strings* ScOrcusFactory::get_shared_strings()
- {
-     return &maSharedStrings;
--- 
-1.8.3.rc2
-
index 2f762bb0a5982c0e296c0d32886aaf1beeb9c217..67c455e33e34ccdec542f0e9a9705086e9e72461 100644 (file)
@@ -79,7 +79,7 @@ Source25:     http://dev-www.libreoffice.org/src/a7983f859eafb2677d7ff386a023bc40-xs
 Patch0:                %{name}-hamcrest.patch
 Patch1:                %{name}-liborcus.patch
 Patch2:                %{name}-mdds.patch
-Patch3:                %{name}-liborcus-build.patch
+Patch3:                liborcus-0.5.x.patch
 URL:           http://www.documentfoundation.org/
 BuildRequires: /usr/bin/getopt
 BuildRequires: GConf2-devel
@@ -2532,7 +2532,7 @@ bashowe uzupełnianie nazw dla LibreOffice.
 %patch0 -p0
 %patch1 -p1
 %patch2 -p1
-#%patch3 -p1
+%patch3 -p0
 
 for dir in *-%{version}; do
        [ -f $dir/ChangeLog ] && mv $dir/ChangeLog ChangeLog-$dir
This page took 0.080346 seconds and 4 git commands to generate.