sc/source/filter/inc/orcusinterface.hxx |   13 +++++++++++++
 sc/source/filter/orcus/interface.cxx    |   26 ++++++++++++++++++++++++++
 2 files changed, 39 insertions(+)

New commits:
commit cd710d7645d3dfc7b796c961cf3067aed8cc3f99
Author: Kohei Yoshida <kohei.yosh...@gmail.com>
Date:   Mon Dec 11 21:53:55 2017 -0500

    Pick up global named expressions.
    
    Formulas with named expressions don't work yet since they get
    imported before the named expressions do.  We need to insert formula
    cells after the named expressions.
    
    Change-Id: Id2d7c59194ce7c07a3580cc8d9afd9fdda660b24

diff --git a/sc/source/filter/inc/orcusinterface.hxx 
b/sc/source/filter/inc/orcusinterface.hxx
index b869e0bc43a4..64c3383708f2 100644
--- a/sc/source/filter/inc/orcusinterface.hxx
+++ b/sc/source/filter/inc/orcusinterface.hxx
@@ -76,6 +76,17 @@ public:
     orcus::spreadsheet::range_t resolve_range(const char* p, size_t n);
 };
 
+class ScOrcusNamedExpression : public 
orcus::spreadsheet::iface::import_named_expression
+{
+    ScDocumentImport& mrDoc;
+    const ScOrcusGlobalSettings& mrGlobalSettings;
+
+public:
+    ScOrcusNamedExpression( ScDocumentImport& rDoc, const 
ScOrcusGlobalSettings& rGS );
+
+    virtual void define_name(const char* p_name, size_t n_name, const char* 
p_exp, size_t n_exp) override;
+};
+
 class ScOrcusSharedStrings : public 
orcus::spreadsheet::iface::import_shared_strings
 {
     ScOrcusFactory& mrFactory;
@@ -518,6 +529,7 @@ class ScOrcusFactory : public 
orcus::spreadsheet::iface::import_factory
     ScOrcusGlobalSettings maGlobalSettings;
     ScOrcusRefResolver maRefResolver;
     ScOrcusSharedStrings maSharedStrings;
+    ScOrcusNamedExpression maNamedExpressions;
     std::vector< std::unique_ptr<ScOrcusSheet> > maSheets;
     ScOrcusStyles maStyles;
 
@@ -534,6 +546,7 @@ public:
     virtual orcus::spreadsheet::iface::import_sheet* 
get_sheet(orcus::spreadsheet::sheet_t sheet_index) override;
     virtual orcus::spreadsheet::iface::import_global_settings* 
get_global_settings() override;
     virtual orcus::spreadsheet::iface::import_shared_strings* 
get_shared_strings() override;
+    virtual orcus::spreadsheet::iface::import_named_expression* 
get_named_expression() override;
     virtual orcus::spreadsheet::iface::import_styles* get_styles() override;
     virtual void finalize() override;
 
diff --git a/sc/source/filter/orcus/interface.cxx 
b/sc/source/filter/orcus/interface.cxx
index 87ac4f89d0e8..f57ca97eae65 100644
--- a/sc/source/filter/orcus/interface.cxx
+++ b/sc/source/filter/orcus/interface.cxx
@@ -151,6 +151,26 @@ os::range_t ScOrcusRefResolver::resolve_range(const char* 
p, size_t n)
     return ret;
 }
 
+ScOrcusNamedExpression::ScOrcusNamedExpression(
+    ScDocumentImport& rDoc, const ScOrcusGlobalSettings& rGS ) :
+    mrDoc(rDoc), mrGlobalSettings(rGS) {}
+
+void ScOrcusNamedExpression::define_name(const char* p_name, size_t n_name, 
const char* p_exp, size_t n_exp)
+{
+    OUString aName(p_name, n_name, RTL_TEXTENCODING_UTF8);
+    OUString aExpr(p_exp, n_exp, RTL_TEXTENCODING_UTF8);
+
+    ScRangeName* pNames = mrDoc.getDoc().GetRangeName();
+    if (!pNames)
+        return;
+
+    ScRangeData* pRange = new ScRangeData(
+        &mrDoc.getDoc(), aName, aExpr, ScAddress(), ScRangeData::Type::Name,
+        mrGlobalSettings.getCalcGrammar());
+
+    pNames->insert(pRange, false);
+}
+
 ScOrcusFactory::StringCellCache::StringCellCache(const ScAddress& rPos, size_t 
nIndex) :
     maPos(rPos), mnIndex(nIndex) {}
 
@@ -159,6 +179,7 @@ ScOrcusFactory::ScOrcusFactory(ScDocument& rDoc) :
     maGlobalSettings(maDoc),
     maRefResolver(maDoc, maGlobalSettings),
     maSharedStrings(*this),
+    maNamedExpressions(maDoc, maGlobalSettings),
     maStyles(rDoc),
     mnProgress(0) {}
 
@@ -242,6 +263,11 @@ orcus::spreadsheet::iface::import_shared_strings* 
ScOrcusFactory::get_shared_str
     return &maSharedStrings;
 }
 
+orcus::spreadsheet::iface::import_named_expression* 
ScOrcusFactory::get_named_expression()
+{
+    return &maNamedExpressions;
+}
+
 orcus::spreadsheet::iface::import_styles* ScOrcusFactory::get_styles()
 {
     return &maStyles;
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to