summaryrefslogtreecommitdiff
path: root/formula
diff options
context:
space:
mode:
Diffstat (limited to 'formula')
-rw-r--r--formula/inc/formula/FormulaCompiler.hxx6
-rw-r--r--formula/source/core/api/FormulaCompiler.cxx38
2 files changed, 38 insertions, 6 deletions
diff --git a/formula/inc/formula/FormulaCompiler.hxx b/formula/inc/formula/FormulaCompiler.hxx
index 47fefb3682..1ccdf2d487 100644
--- a/formula/inc/formula/FormulaCompiler.hxx
+++ b/formula/inc/formula/FormulaCompiler.hxx
@@ -121,7 +121,8 @@ public:
mbEnglish = FormulaGrammar::isEnglish( meGrammar);
}
virtual ~OpCodeMap();
-
+
+ void copyFrom( const OpCodeMap& r );
/// Get the symbol String -> OpCode hash map for finds.
inline const OpCodeHashMap* getHashMap() const { return mpHashMap; }
@@ -243,7 +244,8 @@ public:
inline FormulaGrammar::Grammar GetGrammar() const { return meGrammar; }
static void UpdateSeparatorsNative( const rtl::OUString& rSep, const rtl::OUString& rArrayColSep, const rtl::OUString& rArrayRowSep );
-
+ static void ResetNativeSymbols();
+ static void SetNativeSymbols( const OpCodeMapPtr& xMap );
protected:
virtual String FindAddInFunction( const String& rUpperName, BOOL bLocalFirst ) const;
virtual void fillFromAddInCollectionUpperName( NonConstOpCodeMapPtr xMap ) const;
diff --git a/formula/source/core/api/FormulaCompiler.cxx b/formula/source/core/api/FormulaCompiler.cxx
index fed0aabaea..2cd662d18d 100644
--- a/formula/source/core/api/FormulaCompiler.cxx
+++ b/formula/source/core/api/FormulaCompiler.cxx
@@ -642,6 +642,7 @@ const String& FormulaCompiler::GetNativeSymbol( OpCode eOp )
// -----------------------------------------------------------------------------
void FormulaCompiler::InitSymbolsNative() const
{
+#if 0 // No point in keeping this since you can now do this from the UI.
if (mxSymbolsNative.get())
return;
//! Experimental!
@@ -656,10 +657,9 @@ void FormulaCompiler::InitSymbolsNative() const
mxSymbolsNative = mxSymbolsEnglish;
return;
}
- static NonConstOpCodeMapPtr s_sSymbol;
- if ( !s_sSymbol.get() )
- lcl_fillNativeSymbols(s_sSymbol);
- mxSymbolsNative = s_sSymbol;
+#endif
+
+ lcl_fillNativeSymbols(mxSymbolsNative);
}
// -----------------------------------------------------------------------------
void FormulaCompiler::InitSymbolsEnglish() const
@@ -796,6 +796,22 @@ FormulaCompiler::OpCodeMap::~OpCodeMap()
delete mpHashMap;
}
// -----------------------------------------------------------------------------
+void FormulaCompiler::OpCodeMap::copyFrom( const OpCodeMap& r )
+{
+ delete mpHashMap;
+ mpHashMap = new OpCodeHashMap(mnSymbols);
+
+ USHORT n = r.getSymbolCount();
+ for (USHORT i = 0; i < n; ++i)
+ {
+ OpCode eOp = OpCode(i);
+ const String& rSymbol = r.getSymbol(eOp);
+ putOpCode(rSymbol, eOp);
+ }
+
+ // TODO: maybe copy the external maps too?
+}
+// -----------------------------------------------------------------------------
sal_Int32 FormulaCompiler::OpCodeMap::getOpCodeUnknown()
{
static const sal_Int32 kOpCodeUnknown = -1;
@@ -1710,6 +1726,20 @@ void FormulaCompiler::UpdateSeparatorsNative(
xSymbolsNative->putOpCode(rArrayRowSep, ocArrayRowSep);
}
+void FormulaCompiler::ResetNativeSymbols()
+{
+ NonConstOpCodeMapPtr xSymbolsNative;
+ lcl_fillNativeSymbols(xSymbolsNative, true);
+ lcl_fillNativeSymbols(xSymbolsNative);
+}
+
+void FormulaCompiler::SetNativeSymbols( const OpCodeMapPtr& xMap )
+{
+ NonConstOpCodeMapPtr xSymbolsNative;
+ lcl_fillNativeSymbols(xSymbolsNative);
+ xSymbolsNative->copyFrom(*xMap);
+}
+
// -----------------------------------------------------------------------------
OpCode FormulaCompiler::NextToken()
{