Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
cxfa_fmparser.h
Go to the documentation of this file.
1// Copyright 2014 The PDFium Authors
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7#ifndef XFA_FXFA_FORMCALC_CXFA_FMPARSER_H_
8#define XFA_FXFA_FORMCALC_CXFA_FMPARSER_H_
9
10#include <vector>
11
12#include "core/fxcrt/unowned_ptr_exclusion.h"
13#include "fxjs/gc/heap.h"
14#include "third_party/abseil-cpp/absl/types/optional.h"
15#include "v8/include/cppgc/macros.h"
16#include "v8/include/cppgc/member.h"
17#include "xfa/fxfa/formcalc/cxfa_fmexpression.h"
18#include "xfa/fxfa/formcalc/cxfa_fmlexer.h"
19
21 CPPGC_STACK_ALLOCATED(); // Allow Raw/Unowned pointers.
22
23 public:
24 CXFA_FMParser(cppgc::Heap* heap, CXFA_FMLexer* pLexer);
26
27 // Returned object is owned by cppgc heap.
29 bool HasError() const;
30
31 void SetMaxParseDepthForTest(unsigned long max_depth) {
32 m_max_parse_depth = max_depth;
33 }
34
35 private:
36 bool NextToken();
37 bool CheckThenNext(XFA_FM_TOKEN op);
38 bool IncrementParseDepthAndCheck();
39
41 CXFA_FMExpression* ParseFunction();
42 CXFA_FMExpression* ParseExpression();
43 CXFA_FMExpression* ParseDeclarationExpression();
44 CXFA_FMExpression* ParseExpExpression();
45 CXFA_FMExpression* ParseIfExpression();
46 CXFA_FMExpression* ParseWhileExpression();
47 CXFA_FMExpression* ParseForExpression();
48 CXFA_FMExpression* ParseForeachExpression();
49 CXFA_FMExpression* ParseDoExpression();
50 CXFA_FMSimpleExpression* ParseParenExpression();
51 CXFA_FMSimpleExpression* ParseSimpleExpression();
52 CXFA_FMSimpleExpression* ParseLogicalOrExpression();
53 CXFA_FMSimpleExpression* ParseLogicalAndExpression();
54 CXFA_FMSimpleExpression* ParseEqualityExpression();
55 CXFA_FMSimpleExpression* ParseRelationalExpression();
56 CXFA_FMSimpleExpression* ParseAdditiveExpression();
57 CXFA_FMSimpleExpression* ParseMultiplicativeExpression();
58 CXFA_FMSimpleExpression* ParseUnaryExpression();
59 CXFA_FMSimpleExpression* ParsePrimaryExpression();
60 CXFA_FMSimpleExpression* ParsePostExpression(CXFA_FMSimpleExpression* e);
61 CXFA_FMSimpleExpression* ParseIndexExpression();
62 CXFA_FMSimpleExpression* ParseLiteral();
65
66 UnownedPtr<cppgc::Heap> const m_heap;
67 UNOWNED_PTR_EXCLUSION CXFA_FMLexer* const m_lexer; // Stack allocated.
68 CXFA_FMLexer::Token m_token;
69 bool m_error = false;
70 unsigned long m_parse_depth = 0;
71 unsigned long m_max_parse_depth;
72};
73
74#endif // XFA_FXFA_FORMCALC_CXFA_FMPARSER_H_
XFA_ResolveFlag
const FXJSE_CLASS_DESCRIPTOR kFormCalcDescriptor
bool IsNotZero() const
uint8_t GetScale() const
void SetScale(uint8_t newScale)
CFGAS_Decimal(uint64_t val)
CFGAS_Decimal(float val, uint8_t scale)
CFGAS_Decimal(WideStringView str)
CFGAS_Decimal operator*(const CFGAS_Decimal &val) const
CFGAS_Decimal(uint32_t val)
double ToDouble() const
WideString ToWideString() const
CFGAS_Decimal operator/(const CFGAS_Decimal &val) const
CFGAS_Decimal(int32_t val)
float ToFloat() const
XFA_SCRIPTATTRIBUTEINFO script_attribute
CXFA_Object * GetThisObject() const
friend class EventParamScope
v8::Local< v8::Value > GlobalPropertyGetter()
static ByteString Local2IsoDate(CFXJSE_HostObject *pThis, ByteStringView bsDate, ByteStringView bsFormat, ByteStringView bsLocale)
static ByteString Num2AllTime(CFXJSE_HostObject *pThis, int32_t iTime, ByteStringView bsFormat, ByteStringView bsLocale, bool bGM)
CXFA_Document * GetDocument() const
static ByteString GetStandardTimeFormat(CFXJSE_HostObject *pThis, int32_t iStyle, ByteStringView bsLocale)
static ByteString GetStandardDateFormat(CFXJSE_HostObject *pThis, int32_t iStyle, ByteStringView bsLocale)
CFXJSE_FormCalcContext * AsFormCalcContext() override
static ByteString GetLocalDateFormat(CFXJSE_HostObject *pThis, int32_t iStyle, ByteStringView bsLocale, bool bStandard)
~CFXJSE_FormCalcContext() override
CFXJSE_FormCalcContext(v8::Isolate *pIsolate, CFXJSE_Context *pScriptContext, CXFA_Document *pDoc)
static ByteString GetLocalTimeFormat(CFXJSE_HostObject *pThis, int32_t iStyle, ByteStringView bsLocale, bool bStandard)
static ByteString IsoDate2Local(CFXJSE_HostObject *pThis, ByteStringView bsDate, ByteStringView bsFormat, ByteStringView bsLocale)
static ByteString IsoTime2Local(CFXJSE_HostObject *pThis, ByteStringView bsTime, ByteStringView bsFormat, ByteStringView bsLocale)
virtual CFXJSE_FormCalcContext * AsFormCalcContext()
Definition fxjse.cpp:34
int32_t GetYear() const
uint8_t GetSecond() const
uint8_t GetHour() const
uint8_t GetDay() const
uint8_t GetMinute() const
uint16_t GetMillisecond() const
uint8_t GetMonth() const
CXFA_FFNotify * GetNotify() const
CXFA_LocaleMgr * GetLocaleMgr()
CFXJSE_Engine * GetScriptContext() const
virtual bool PostRequestURL(const WideString &wsURL, const WideString &wsData, const WideString &wsContentType, const WideString &wsEncode, const WideString &wsHeader, WideString &wsResponse)=0
virtual bool PutRequestURL(const WideString &wsURL, const WideString &wsData, const WideString &wsEncode)=0
CXFA_FFApp::CallbackIface * GetAppProvider()
bool HasError() const
CXFA_FMParser(cppgc::Heap *heap, CXFA_FMLexer *pLexer)
CXFA_FMAST * Parse()
void SetMaxParseDepthForTest(unsigned long max_depth)
GCedLocaleIface * GetDefLocale() override
GCedLocaleIface * GetLocaleByName(const WideString &wsLocaleName) override
CXFA_LocaleValue(ValueType dwType, const WideString &wsValue, const WideString &wsFormat, GCedLocaleIface *pLocale, CXFA_LocaleMgr *pLocaleMgr)
double GetDoubleNum() const
CFX_DateTime GetTime() const
const WideString & GetValue() const
CFX_DateTime GetDate() const
bool FormatPatterns(WideString &wsResult, const WideString &wsFormat, GCedLocaleIface *pLocale, XFA_ValuePicture eValueType) const
bool IsValid() const
GCedLocaleIface * GetLocale()
CXFA_Node * AsNode()
virtual WideString GetDatePattern(DateTimeSubcategory eType) const =0
virtual int GetTimeZoneInMinutes() const =0
virtual WideString GetDateTimeSymbols() const =0
virtual WideString GetTimePattern(DateTimeSubcategory eType) const =0
ByteString(const char *ptr)
bool EqualNoCase(ByteStringView str) const
static ByteString Format(const char *pFormat,...)
ByteString & operator+=(const ByteString &str)
ByteString & operator+=(char ch)
static ByteString FormatInteger(int i)
bool operator==(const ByteString &other) const
bool operator==(const char *ptr) const
ByteString & operator+=(const char *str)
const char * c_str() const
Definition bytestring.h:76
ByteString & operator=(const ByteString &that)
bool IsEmpty() const
Definition bytestring.h:119
int Compare(ByteStringView str) const
ByteString ToUTF8() const
WideString & operator=(WideString &&that) noexcept
static WideString FromUTF8(ByteStringView str)
CharType operator[](const size_t index) const
Definition widestring.h:146
bool IsEmpty() const
Definition widestring.h:118
const wchar_t * c_str() const
Definition widestring.h:81
WideString(const wchar_t *ptr)
bool IsASCII() const
Definition widestring.h:215
ByteString ToASCII() const
static WideString FromASCII(ByteStringView str)
void AppendChar(wchar_t wch)
WideString MakeString() const
WideStringView AsStringView() const
XFA_FM_TOKEN
XFA_ValuePicture
Definition cxfa_node.h:70
CXFA_Node * ToNode(CXFA_Object *pObj)
time_t FXSYS_time(time_t *tloc)
int FXSYS_WideHexCharToInt(wchar_t c)
bool FXSYS_IsDecimalDigit(wchar_t c)
bool FXSYS_IsWideHexDigit(wchar_t c)
struct tm * FXSYS_localtime(const time_t *tp)
void FX_Random_GenerateMT(uint32_t *pBuffer, int32_t iCount)
int32_t FXSYS_atoi(const char *str)
#define FX_FILESIZE
Definition fx_types.h:19
XFA_Attribute
Definition fxfa_basic.h:67
XFA_ScriptType
Definition fxfa_basic.h:104
Definition heap.h:12
ByteString operator+(const ByteString &str1, const ByteString &str2)
Definition bytestring.h:270
WideString operator+(const WideString &str1, const WideString &str2)
Definition widestring.h:269
ByteString operator+(const ByteString &str1, const char *str2)
Definition bytestring.h:279
WideString operator+(const wchar_t *str1, const WideString &str2)
Definition widestring.h:281
WideString operator+(const WideString &str1, const wchar_t *str2)
Definition widestring.h:278
Definition fxv8.h:22
bool IsBoolean(v8::Local< v8::Value > value)
Definition fxv8.cpp:27
bool IsArray(v8::Local< v8::Value > value)
Definition fxv8.cpp:47
bool IsUndefined(v8::Local< v8::Value > value)
Definition fxv8.cpp:19
bool IsNumber(v8::Local< v8::Value > value)
Definition fxv8.cpp:35
bool IsObject(v8::Local< v8::Value > value)
Definition fxv8.cpp:43
bool IsString(v8::Local< v8::Value > value)
Definition fxv8.cpp:31
ByteString ReentrantToByteStringHelper(v8::Isolate *pIsolate, v8::Local< v8::Value > pValue)
Definition fxv8.cpp:173
bool ReentrantToBooleanHelper(v8::Isolate *pIsolate, v8::Local< v8::Value > pValue)
Definition fxv8.cpp:138
bool IsNull(v8::Local< v8::Value > value)
Definition fxv8.cpp:23
int32_t ReentrantToInt32Helper(v8::Isolate *pIsolate, v8::Local< v8::Value > pValue)
Definition fxv8.cpp:131
const char kClassTag[]
Definition fxjse.cpp:18
const char kFuncTag[]
Definition fxjse.cpp:17
XFA_ScriptType eValueType
XFA_ATTRIBUTE_CALLBACK callback
#define UNOWNED_PTR_EXCLUSION