30 #include <rtl/ustrbuf.hxx>
31 #include <com/sun/star/sheet/ExternalLinkInfo.hpp>
32 #include <com/sun/star/i18n/ParseResult.hpp>
37 #include <com/sun/star/uno/Sequence.hxx>
46 #define MAXSTRLEN 1024
82 #define SC_COMPILER_FILE_TAB_SEP '#' // 'Doc'#Tab
93 class CompileFormulaContext;
156 void SetString( rtl_uString* pData, rtl_uString* pDataIgnoreCase );
185 EXTENDED_ERROR_DETECTION_NONE = 0,
187 EXTENDED_ERROR_DETECTION_NAME_NO_BREAK
197 virtual void makeRefStr(
199 OUStringBuffer& rBuffer,
202 const OUString& rErrRef,
const std::vector<OUString>& rTabNames,
203 const ScComplexRefData& rRef,
bool bSingleRef,
bool bFromRangeName )
const = 0;
205 virtual css::i18n::ParseResult
206 parseAnyToken(
const OUString& rFormula,
209 bool bGroupSeparator)
const = 0;
217 virtual bool parseExternalName(
const OUString& rSymbol, OUString& rFile, OUString& rName,
219 const css::uno::Sequence< css::sheet::ExternalLinkInfo>* pExternalLinks )
const = 0;
221 virtual OUString makeExternalNameStr( sal_uInt16 nFileId,
const OUString& rFile,
222 const OUString& rName )
const = 0;
224 virtual void makeExternalRefStr(
226 OUStringBuffer& rBuffer,
const ScAddress& rPos, sal_uInt16 nFileId,
const OUString& rFileName,
229 virtual void makeExternalRefStr(
231 OUStringBuffer& rBuffer,
const ScAddress& rPos,
232 sal_uInt16 nFileId,
const OUString& rFileName,
const std::vector<OUString>& rTabNames,
249 virtual sal_Unicode getSpecialSymbol( SpecialSymbolType eSymType )
const = 0;
271 static size_t GetAddInMapCount();
305 std::vector<OUString> &GetSetupTabNames()
const;
320 : parameterLocation( p ), parameter( *p ), operation( o ) {}
331 bool NextNewToken(
bool bInArray);
332 bool ToUpperAsciiOrI18nIsAscii( OUString& rUpper,
const OUString& rOrg )
const;
345 static void addWhitespace( std::vector<ScCompiler::Whitespace> & rvSpaces,
348 std::vector<Whitespace> NextSymbol(
bool bInArray);
350 bool ParseValue(
const OUString& );
351 bool ParseOpCode(
const OUString&,
bool bInArray );
352 bool ParseOpCode2( std::u16string_view );
354 bool ParseReference(
const OUString& rSymbol,
const OUString* pErrRef =
nullptr );
355 bool ParseSingleReference(
const OUString& rSymbol,
const OUString* pErrRef =
nullptr );
356 bool ParseDoubleReference(
const OUString& rSymbol,
const OUString* pErrRef =
nullptr );
357 bool ParsePredetectedReference(
const OUString& rSymbol );
358 bool ParsePredetectedErrRefReference(
const OUString& rName,
const OUString* pErrRef );
359 bool ParseMacro(
const OUString& );
360 bool ParseNamedRange(
const OUString&,
bool onlyCheck =
false );
361 bool ParseExternalNamedRange(
const OUString& rSymbol,
bool& rbInvalidExternalNameRange );
362 bool ParseDBRange(
const OUString& );
363 bool ParseColRowName(
const OUString& );
364 bool ParseBoolean(
const OUString& );
365 void AutoCorrectParsedSymbol();
366 const ScRangeData* GetRangeData(
SCTAB& rSheet,
const OUString& rUpperName )
const;
368 void AdjustSheetLocalNameRelReferences(
SCTAB nDelta );
369 void SetRelNameReference();
378 bool HasPossibleNamedRangeConflict(
SCTAB nTab)
const;
380 static const CharClass* GetCharClassEnglish();
381 static const CharClass* GetCharClassLocalized();
385 bool bComputeII =
false,
bool bMatrixFlag =
false,
const ScInterpreterContext* pContext =
nullptr );
391 bool bComputeII =
false,
bool bMatrixFlag =
false,
const ScInterpreterContext* pContext =
nullptr );
394 bool bComputeII =
false,
bool bMatrixFlag =
false,
const ScInterpreterContext* pContext =
nullptr );
400 bool bComputeII =
false,
bool bMatrixFlag =
false,
const ScInterpreterContext* pContext =
nullptr );
405 static void DeInit();
408 static void CheckTabQuotes( OUString& aTabName,
415 static sal_Int32 GetDocTabPos(
const OUString& rString );
417 static bool EnQuote( OUString& rStr );
420 static bool IsEnglishSymbol(
const OUString& rName );
422 bool ParseErrorConstant(
const OUString& );
423 bool ParseTableRefItem(
const OUString& );
424 bool ParseTableRefColumn(
const OUString& );
427 bool GetTokenIfOpCode(
OpCode eOp );
432 void SetAutoCorrection(
bool bVal );
435 void SetRefConvention(
const Convention *pConvP );
441 void SetFormulaLanguage(
const OpCodeMapPtr & xMap );
457 void SetGrammarAndRefConvention(
464 const css::uno::Sequence<
465 css::sheet::ExternalLinkInfo>& rLinks )
467 maExternalLinks = rLinks;
470 void CreateStringFromXMLTokenArray( OUString& rFormula, OUString& rFormulaNmsp );
485 std::unique_ptr<ScTokenArray> CompileString(
const OUString& rFormula );
486 std::unique_ptr<ScTokenArray> CompileString(
const OUString& rFormula,
const OUString& rFormulaNmsp );
496 static bool IsCharFlagAllConventions(
497 OUString
const & rStr, sal_Int32 nPos,
ScCharFlags nFlags );
500 static bool DoubleRefToPosSingleRefScalarCase(
const ScRange& rRange,
ScAddress& rAdr,
510 virtual OUString
FindAddInFunction(
const OUString& rUpperName,
bool bLocalFirst )
const override;
514 virtual void fillAddInToken(::std::vector< css::sheet::FormulaOpCodeMapEntry >& _rVec,
bool _bIsEnglish)
const override;
545 void AnnotateTrimOnDoubleRefs();
Matrix data type that can store values of mixed types.
void SetErrorConstant(FormulaError nErr)
void reset(sal_Unicode c)
ScTableRefToken::Item eItem
formula::ParamClass eInForceArray
void SetString(rtl_uString *pData, rtl_uString *pDataIgnoreCase)
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
struct ScRawToken::@19::@27 sharedstring
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
static const CharClass * pCharClassLocalized
short nJump[FORMULA_MAXJUMPCOUNT+1]
const std::set< OpCode > & UnhandledPossibleImplicitIntersectionsOpCodes()
struct ScRawToken::@19::@26 table
struct ScRawToken::@19::@22 sbyte
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
struct ScRawToken::@19::@23 extref
CAUTION! The following defines must be in the same namespace as the respective type.
std::queue< OpCode > maPendingOpCodes
ExtendedErrorDetection meExtendedErrorDetection
struct ScRawToken::@19::@25 name
bool mbRefConventionChartOOXML
PendingImplicitIntersectionOptimization(formula::FormulaToken **p, formula::FormulaToken *o)
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.
struct ScRawToken::@19::@24 extname
bool HasUnhandledPossibleImplicitIntersections() const
void SetSingleReference(const ScSingleRefData &rRef)
formula::FormulaToken ** parameterLocation
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 SetRefConventionChartOOXML(bool bVal)
void SetExternal(const OUString &rStr)
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
struct ScRawToken::@19::@21 whitespace