20#ifndef INCLUDED_FORMULA_FORMULACOMPILER_HXX
21#define INCLUDED_FORMULA_FORMULACOMPILER_HXX
24#include <unordered_map>
27#include <com/sun/star/uno/Sequence.hxx>
34#include <rtl/ustrbuf.hxx>
35#include <rtl/ustring.hxx>
39#define FORMULA_MAXJUMPCOUNT 32
40#define FORMULA_MAXTOKENS 8192
41#define FORMULA_MAXPARAMS 255
42#define FORMULA_MAXPARAMSII 8
47 struct FormulaOpCodeMapEntry;
101 mpTable( new OUString[ nSymbols ]),
102 meGrammar( eGrammar),
103 mnSymbols( nSymbols),
106 mbEnglishLocale ( mbEnglish )
130 DBG_ASSERT( sal_uInt16(eOp) < mnSymbols,
"OpCodeMap::getSymbol: OpCode out of range");
131 if (sal_uInt16(eOp) < mnSymbols)
132 return mpTable[ eOp ];
133 static OUString s_sEmpty;
169 void putOpCode(
const OUString & rStr,
const OpCode eOp,
const CharClass* pCharClass );
172 void putExternal(
const OUString & rSymbol,
const OUString & rAddIn );
177 void putExternalSoftly(
const OUString & rSymbol,
const OUString & rAddIn );
180 css::uno::Sequence< css::sheet::FormulaToken >
182 const css::uno::Sequence< OUString >& rNames )
const;
185 css::uno::Sequence< css::sheet::FormulaOpCodeMapEntry >
186 createSequenceOfAvailableMappings(
const FormulaCompiler& _rCompiler,
const sal_Int32 nGroup )
const;
198 void putCopyOpCode(
const OUString& rSymbol,
OpCode eOp );
218 OpCodeMapPtr GetFinalOpCodeMap(
const sal_Int32 nLanguage )
const;
233 OpCodeMapPtr GetOpCodeMap(
const sal_Int32 nLanguage )
const;
246 void DestroyOpCodeMap(
const sal_Int32 nLanguage );
253 bool HasOpCodeMap(
const sal_Int32 nLanguage )
const;
260 const css::uno::Sequence< const css::sheet::FormulaOpCodeMapEntry > & rMapping,
271 OpCode GetEnglishOpCode(
const OUString& rName )
const;
273 FormulaError GetErrorConstant(
const OUString& rName )
const;
274 void AppendErrorConstant( OUStringBuffer& rBuffer,
FormulaError nError )
const;
276 void EnableJumpCommandReorder(
bool bEnable );
277 void EnableStopOnError(
bool bEnable );
279 static bool IsOpCodeVolatile(
OpCode eOp );
280 static bool IsOpCodeJumpCommand(
OpCode eOp );
282 static bool DeQuote( OUString& rStr );
285 static const OUString& GetNativeSymbol(
OpCode eOp );
287 static bool IsMatrixFunction(
OpCode _eOpCode);
290 bool CompileTokenArray();
292 void CreateStringFromTokenArray( OUString& rFormula );
293 void CreateStringFromTokenArray( OUStringBuffer& rBuffer );
296 bool bAllowArrAdvance =
false );
298 void AppendBoolean( OUStringBuffer& rBuffer,
bool bVal )
const;
299 void AppendDouble( OUStringBuffer& rBuffer,
double fVal )
const;
300 static void AppendString( OUStringBuffer& rBuffer,
const OUString & rStr );
310 bool NeedsTableRefTransformation()
const;
317 static void UpdateSeparatorsNative(
const OUString& rSep,
const OUString& rArrayColSep,
const OUString& rArrayRowSep );
318 static void ResetNativeSymbols();
319 static void SetNativeSymbols(
const OpCodeMapPtr& xMap );
338 virtual OUString FindAddInFunction(
const OUString& rUpperName,
bool bLocalFirst )
const;
339 virtual void fillFromAddInCollectionUpperName(
const NonConstOpCodeMapPtr& xMap )
const;
341 virtual void fillFromAddInCollectionEnglishName(
const NonConstOpCodeMapPtr& xMap )
const;
342 virtual void fillAddInToken(::std::vector< css::sheet::FormulaOpCodeMapEntry >& _rVec,
bool _bIsEnglish)
const;
346 virtual bool HandleExternalReference(
const FormulaToken& _aToken);
347 virtual bool HandleRange();
348 virtual bool HandleColRowName();
349 virtual bool HandleDbData();
350 virtual bool HandleTableRef();
352 virtual void CreateStringFromExternal( OUStringBuffer& rBuffer,
const FormulaToken* pToken )
const;
353 virtual void CreateStringFromSingleRef( OUStringBuffer& rBuffer,
const FormulaToken* pToken )
const;
354 virtual void CreateStringFromDoubleRef( OUStringBuffer& rBuffer,
const FormulaToken* pToken )
const;
355 virtual void CreateStringFromMatrix( OUStringBuffer& rBuffer,
const FormulaToken* pToken )
const;
356 virtual void CreateStringFromIndex( OUStringBuffer& rBuffer,
const FormulaToken* pToken )
const;
357 virtual void LocalizeString( OUString& rName )
const;
365 void IntersectionLine();
374 void PopTokenArray();
431 bool InitSymbolsNative( InitSymbols )
const;
432 bool InitSymbolsEnglish( InitSymbols )
const;
433 bool InitSymbolsPODF( InitSymbols )
const;
434 bool InitSymbolsAPI( InitSymbols )
const;
435 bool InitSymbolsODFF( InitSymbols )
const;
436 bool InitSymbolsEnglishXL( InitSymbols )
const;
437 bool InitSymbolsOOXML( InitSymbols )
const;
439 void loadSymbols(
const std::pair<const char*, int>* pSymbols,
FormulaGrammar::Grammar eGrammar, NonConstOpCodeMapPtr& rxMap,
440 SeparatorType eSepType = SeparatorType::SEMICOLON_BASE)
const;
459 : pPrevFac( pComp->pCurrentFactorToken )
460 , nPrevParam( pComp->nCurrentFactorParam )
485 {
return operator->(); }
#define DBG_ASSERT(sCon, aError)