xref: /aosp_15_r20/external/pdfium/fxjs/xfa/cfxjse_resolveprocessor.h (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
1*3ac0a46fSAndroid Build Coastguard Worker // Copyright 2014 The PDFium Authors
2*3ac0a46fSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*3ac0a46fSAndroid Build Coastguard Worker // found in the LICENSE file.
4*3ac0a46fSAndroid Build Coastguard Worker 
5*3ac0a46fSAndroid Build Coastguard Worker // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6*3ac0a46fSAndroid Build Coastguard Worker 
7*3ac0a46fSAndroid Build Coastguard Worker #ifndef FXJS_XFA_CFXJSE_RESOLVEPROCESSOR_H_
8*3ac0a46fSAndroid Build Coastguard Worker #define FXJS_XFA_CFXJSE_RESOLVEPROCESSOR_H_
9*3ac0a46fSAndroid Build Coastguard Worker 
10*3ac0a46fSAndroid Build Coastguard Worker #include <memory>
11*3ac0a46fSAndroid Build Coastguard Worker 
12*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/unowned_ptr.h"
13*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/widestring.h"
14*3ac0a46fSAndroid Build Coastguard Worker #include "fxjs/xfa/cfxjse_engine.h"
15*3ac0a46fSAndroid Build Coastguard Worker #include "v8/include/cppgc/macros.h"
16*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/fxfa_basic.h"
17*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/parser/xfa_basic_data.h"
18*3ac0a46fSAndroid Build Coastguard Worker 
19*3ac0a46fSAndroid Build Coastguard Worker class CFXJSE_NodeHelper;
20*3ac0a46fSAndroid Build Coastguard Worker 
21*3ac0a46fSAndroid Build Coastguard Worker class CFXJSE_ResolveProcessor {
22*3ac0a46fSAndroid Build Coastguard Worker  public:
23*3ac0a46fSAndroid Build Coastguard Worker   class NodeData {
24*3ac0a46fSAndroid Build Coastguard Worker     CPPGC_STACK_ALLOCATED();  // Allows Raw/Unowned pointers.
25*3ac0a46fSAndroid Build Coastguard Worker 
26*3ac0a46fSAndroid Build Coastguard Worker    public:
27*3ac0a46fSAndroid Build Coastguard Worker     NodeData();
28*3ac0a46fSAndroid Build Coastguard Worker     ~NodeData();
29*3ac0a46fSAndroid Build Coastguard Worker 
30*3ac0a46fSAndroid Build Coastguard Worker     UnownedPtr<CXFA_Object> m_CurObject;  // Ok, stack-only.
31*3ac0a46fSAndroid Build Coastguard Worker     WideString m_wsName;
32*3ac0a46fSAndroid Build Coastguard Worker     WideString m_wsCondition;
33*3ac0a46fSAndroid Build Coastguard Worker     XFA_HashCode m_uHashName = XFA_HASHCODE_None;
34*3ac0a46fSAndroid Build Coastguard Worker     int32_t m_nLevel = 0;
35*3ac0a46fSAndroid Build Coastguard Worker     Mask<XFA_ResolveFlag> m_dwStyles = XFA_ResolveFlag::kChildren;
36*3ac0a46fSAndroid Build Coastguard Worker     CFXJSE_Engine::ResolveResult m_Result;
37*3ac0a46fSAndroid Build Coastguard Worker   };
38*3ac0a46fSAndroid Build Coastguard Worker 
39*3ac0a46fSAndroid Build Coastguard Worker   CFXJSE_ResolveProcessor(CFXJSE_Engine* pEngine, CFXJSE_NodeHelper* pHelper);
40*3ac0a46fSAndroid Build Coastguard Worker   ~CFXJSE_ResolveProcessor();
41*3ac0a46fSAndroid Build Coastguard Worker 
42*3ac0a46fSAndroid Build Coastguard Worker   bool Resolve(v8::Isolate* pIsolate, NodeData& rnd);
43*3ac0a46fSAndroid Build Coastguard Worker   int32_t GetFilter(WideStringView wsExpression, int32_t nStart, NodeData& rnd);
44*3ac0a46fSAndroid Build Coastguard Worker   int32_t IndexForDataBind(const WideString& wsNextCondition, int32_t iCount);
SetCurStart(int32_t start)45*3ac0a46fSAndroid Build Coastguard Worker   void SetCurStart(int32_t start) { m_iCurStart = start; }
46*3ac0a46fSAndroid Build Coastguard Worker 
47*3ac0a46fSAndroid Build Coastguard Worker  private:
48*3ac0a46fSAndroid Build Coastguard Worker   bool ResolveForAttributeRs(CXFA_Object* curNode,
49*3ac0a46fSAndroid Build Coastguard Worker                              CFXJSE_Engine::ResolveResult* rnd,
50*3ac0a46fSAndroid Build Coastguard Worker                              WideStringView strAttr);
51*3ac0a46fSAndroid Build Coastguard Worker   bool ResolveAnyChild(v8::Isolate* pIsolate, NodeData& rnd);
52*3ac0a46fSAndroid Build Coastguard Worker   bool ResolveDollar(v8::Isolate* pIsolate, NodeData& rnd);
53*3ac0a46fSAndroid Build Coastguard Worker   bool ResolveExcalmatory(v8::Isolate* pIsolate, NodeData& rnd);
54*3ac0a46fSAndroid Build Coastguard Worker   bool ResolveNumberSign(v8::Isolate* pIsolate, NodeData& rnd);
55*3ac0a46fSAndroid Build Coastguard Worker   bool ResolveAsterisk(NodeData& rnd);
56*3ac0a46fSAndroid Build Coastguard Worker   bool ResolveNormal(v8::Isolate* pIsolate, NodeData& rnd);
57*3ac0a46fSAndroid Build Coastguard Worker   void SetStylesForChild(Mask<XFA_ResolveFlag> dwParentStyles, NodeData& rnd);
58*3ac0a46fSAndroid Build Coastguard Worker 
59*3ac0a46fSAndroid Build Coastguard Worker   void ConditionArray(size_t iCurIndex,
60*3ac0a46fSAndroid Build Coastguard Worker                       WideString wsCondition,
61*3ac0a46fSAndroid Build Coastguard Worker                       size_t iFoundCount,
62*3ac0a46fSAndroid Build Coastguard Worker                       NodeData* pRnd);
63*3ac0a46fSAndroid Build Coastguard Worker   void FilterCondition(v8::Isolate* pIsolate,
64*3ac0a46fSAndroid Build Coastguard Worker                        WideString wsCondition,
65*3ac0a46fSAndroid Build Coastguard Worker                        NodeData* pRnd);
66*3ac0a46fSAndroid Build Coastguard Worker   void DoPredicateFilter(v8::Isolate* pIsolate,
67*3ac0a46fSAndroid Build Coastguard Worker                          WideString wsCondition,
68*3ac0a46fSAndroid Build Coastguard Worker                          size_t iFoundCount,
69*3ac0a46fSAndroid Build Coastguard Worker                          NodeData* pRnd);
70*3ac0a46fSAndroid Build Coastguard Worker 
71*3ac0a46fSAndroid Build Coastguard Worker   int32_t m_iCurStart = 0;
72*3ac0a46fSAndroid Build Coastguard Worker   UnownedPtr<CFXJSE_Engine> const m_pEngine;
73*3ac0a46fSAndroid Build Coastguard Worker   UnownedPtr<CFXJSE_NodeHelper> const m_pNodeHelper;
74*3ac0a46fSAndroid Build Coastguard Worker };
75*3ac0a46fSAndroid Build Coastguard Worker 
76*3ac0a46fSAndroid Build Coastguard Worker #endif  // FXJS_XFA_CFXJSE_RESOLVEPROCESSOR_H_
77