20 #ifndef INCLUDED_SC_INC_COMPILER_HXX
21 #define INCLUDED_SC_INC_COMPILER_HXX
31 #include <rtl/ustrbuf.hxx>
32 #include <com/sun/star/sheet/ExternalLinkInfo.hpp>
33 #include <com/sun/star/i18n/ParseResult.hpp>
38 #include <com/sun/star/uno/Sequence.hxx>
47 #define MAXSTRLEN 1024
83 #define SC_COMPILER_FILE_TAB_SEP '#' // 'Doc'#Tab
94 class CompileFormulaContext;
153 void SetString( rtl_uString* pData, rtl_uString* pDataIgoreCase );
182 EXTENDED_ERROR_DETECTION_NONE = 0,
184 EXTENDED_ERROR_DETECTION_NAME_NO_BREAK
194 virtual void makeRefStr(
196 OUStringBuffer& rBuffer,
199 const OUString& rErrRef,
const std::vector<OUString>& rTabNames,
200 const ScComplexRefData& rRef,
bool bSingleRef,
bool bFromRangeName )
const = 0;
202 virtual css::i18n::ParseResult
203 parseAnyToken(
const OUString& rFormula,
206 bool bGroupSeparator)
const = 0;
214 virtual bool parseExternalName(
const OUString& rSymbol, OUString& rFile, OUString& rName,
216 const css::uno::Sequence< css::sheet::ExternalLinkInfo>* pExternalLinks )
const = 0;
218 virtual OUString makeExternalNameStr( sal_uInt16 nFileId,
const OUString& rFile,
219 const OUString& rName )
const = 0;
221 virtual void makeExternalRefStr(
223 OUStringBuffer& rBuffer,
const ScAddress& rPos, sal_uInt16 nFileId,
const OUString& rFileName,
226 virtual void makeExternalRefStr(
228 OUStringBuffer& rBuffer,
const ScAddress& rPos,
229 sal_uInt16 nFileId,
const OUString& rFileName,
const std::vector<OUString>& rTabNames,
246 virtual sal_Unicode getSpecialSymbol( SpecialSymbolType eSymType )
const = 0;
268 static size_t GetAddInMapCount();
300 std::vector<OUString> &GetSetupTabNames()
const;
315 : parameterLocation( p ), parameter( *p ), operation( o ) {}
326 bool NextNewToken(
bool bInArray);
327 bool ToUpperAsciiOrI18nIsAscii( OUString& rUpper,
const OUString& rOrg )
const;
330 sal_Int32 NextSymbol(
bool bInArray);
331 bool IsValue(
const OUString& );
332 bool IsOpCode(
const OUString&,
bool bInArray );
333 bool IsOpCode2(
const OUString& );
335 bool IsReference(
const OUString& rSymbol,
const OUString* pErrRef =
nullptr );
336 bool IsSingleReference(
const OUString& rSymbol,
const OUString* pErrRef =
nullptr );
337 bool IsDoubleReference(
const OUString& rSymbol,
const OUString* pErrRef =
nullptr );
338 bool IsPredetectedReference(
const OUString& rSymbol );
339 bool IsPredetectedErrRefReference(
const OUString& rName,
const OUString* pErrRef );
340 bool IsMacro(
const OUString& );
341 bool IsNamedRange(
const OUString& );
342 bool IsExternalNamedRange(
const OUString& rSymbol,
bool& rbInvalidExternalNameRange );
343 bool IsDBRange(
const OUString& );
344 bool IsColRowName(
const OUString& );
345 bool IsBoolean(
const OUString& );
346 void AutoCorrectParsedSymbol();
348 void AdjustSheetLocalNameRelReferences(
SCTAB nDelta );
349 void SetRelNameReference();
358 static const CharClass* GetCharClassEnglish();
359 static const CharClass* GetCharClassLocalized();
363 bool bComputeII =
false,
bool bMatrixFlag =
false,
const ScInterpreterContext* pContext =
nullptr );
369 bool bComputeII =
false,
bool bMatrixFlag =
false,
const ScInterpreterContext* pContext =
nullptr );
372 bool bComputeII =
false,
bool bMatrixFlag =
false,
const ScInterpreterContext* pContext =
nullptr );
378 bool bComputeII =
false,
bool bMatrixFlag =
false,
const ScInterpreterContext* pContext =
nullptr );
383 static void DeInit();
386 static void CheckTabQuotes( OUString& aTabName,
393 static sal_Int32 GetDocTabPos(
const OUString& rString );
395 static bool EnQuote( OUString& rStr );
398 static bool IsEnglishSymbol(
const OUString& rName );
400 bool IsErrorConstant(
const OUString& )
const;
401 bool IsTableRefItem(
const OUString& )
const;
402 bool IsTableRefColumn(
const OUString& )
const;
405 bool GetTokenIfOpCode(
OpCode eOp );
410 void SetAutoCorrection(
bool bVal );
412 void SetRefConvention(
const Convention *pConvP );
418 void SetFormulaLanguage(
const OpCodeMapPtr & xMap );
434 void SetGrammarAndRefConvention(
441 const css::uno::Sequence<
442 css::sheet::ExternalLinkInfo>& rLinks )
444 maExternalLinks = rLinks;
447 void CreateStringFromXMLTokenArray( OUString& rFormula, OUString& rFormulaNmsp );
462 std::unique_ptr<ScTokenArray> CompileString(
const OUString& rFormula );
463 std::unique_ptr<ScTokenArray> CompileString(
const OUString& rFormula,
const OUString& rFormulaNmsp );
473 static bool IsCharFlagAllConventions(
474 OUString
const & rStr, sal_Int32 nPos,
ScCharFlags nFlags );
477 static bool DoubleRefToPosSingleRefScalarCase(
const ScRange& rRange,
ScAddress& rAdr,
487 virtual OUString
FindAddInFunction(
const OUString& rUpperName,
bool bLocalFirst )
const override;
491 virtual void fillAddInToken(::std::vector< css::sheet::FormulaOpCodeMapEntry >& _rVec,
bool _bIsEnglish)
const override;
Matrix data type that can store values of mixed types.
void SetErrorConstant(FormulaError nErr)
ScTableRefToken::Item eItem
formula::ParamClass eInForceArray
SvNumberFormatter * mpFormatter
formula::FormulaToken * CreateToken(ScSheetLimits &rLimits) const
Single reference (one address) into the sheet.
virtual ScCharFlags getCharTableFlags(sal_Unicode c, sal_Unicode cLast) const =0
void SetDoubleReference(const ScComplexRefData &rRef)
static const CharClass * pCharClassEnglish
Character between sheet name and address.
const CharClass * pCharClass
formula::StackVar GetType() const
only delete via Delete()
sal_uInt16 mnPredetectedReference
void SetExternalDoubleRef(sal_uInt16 nFileId, const OUString &rTabName, const ScComplexRefData &rRef)
const ScInterpreterContext * mpInterpreterContext
void SetExternalLinks(const css::uno::Sequence< css::sheet::ExternalLinkInfo > &rLinks)
Set external link info for ScAddress::CONV_XL_OOX.
std::vector< PendingImplicitIntersectionOptimization > mPendingImplicitIntersectionOptimizations
const OUString & GetCorrectedFormula() const
struct ScRawToken::@19::@23 extname
static const CharClass * pCharClassLocalized
short nJump[FORMULA_MAXJUMPCOUNT+1]
const std::set< OpCode > & UnhandledPossibleImplicitIntersectionsOpCodes()
struct ScRawToken::@19::@22 extref
void SetExternalSingleRef(sal_uInt16 nFileId, const OUString &rTabName, const ScSingleRefData &rRef)
void SetCloseBrackets(bool bVal)
sal_Int32 mnCurrentSheetEndPos
void SetOpCode(OpCode eCode)
const formula::FormulaGrammar::AddressConvention meConv
std::unique_ptr< ScCharFlags[]> mpCharTable
ScCharFlags GetCharTableFlags(sal_Unicode c, sal_Unicode cLast)
Access the CharTable flags.
formula::FormulaTokenRef operation
"stack" of currently active ocTableRef tokens
const ScAddress & GetPos() const
std::queue< OpCode > maPendingOpCodes
void SetString(rtl_uString *pData, rtl_uString *pDataIgoreCase)
ExtendedErrorDetection meExtendedErrorDetection
PendingImplicitIntersectionOptimization(formula::FormulaToken **p, formula::FormulaToken *o)
struct ScRawToken::@19::@25 table
struct ScRawToken::@19::@24 name
void SetName(sal_Int16 nSheet, sal_uInt16 nIndex)
std::vector< sal_uInt16 > maExternalFiles
formula::FormulaTokenRef parameter
css::uno::Sequence< css::sheet::ExternalLinkInfo > maExternalLinks
bool IsValidReference(const ScDocument &rDoc) const
If the token is a non-external reference, determine if the reference is valid.
bool HasUnhandledPossibleImplicitIntersections() const
void SetSingleReference(const ScSingleRefData &rRef)
formula::FormulaToken ** parameterLocation
struct ScRawToken::@19::@21 sbyte
void SetExternalName(sal_uInt16 nFileId, const OUString &rName)
std::vector< OUString > maTabNames
::boost::intrusive_ptr< formula::FormulaToken > ScTokenRef
TableRefEntry(formula::FormulaToken *p)
void SetExtendedErrorDetection(ExtendedErrorDetection eVal)
void SetExternal(const OUString &rStr)
struct ScRawToken::@19::@26 sharedstring
Complex reference (a range) into the sheet.
std::set< formula::FormulaTokenRef > mUnhandledPossibleImplicitIntersections
void SetDouble(double fVal)
std::set< OpCode > mUnhandledPossibleImplicitIntersectionsOpCodes
rtl_uString * mpDataIgnoreCase
sal_Int32 mnRangeOpPosInSymbol
get or setup tab names for the current grammar
std::vector< TableRefEntry > maTableRefs