• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 PDFium Authors. All rights reserved.
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_PARSER_CXFA_RESOLVEPROCESSOR_H_
8 #define XFA_FXFA_PARSER_CXFA_RESOLVEPROCESSOR_H_
9 
10 #include <memory>
11 
12 #include "xfa/fxfa/parser/xfa_object.h"
13 #include "xfa/fxfa/parser/xfa_resolvenode_rs.h"
14 
15 class CXFA_NodeHelper;
16 class CXFA_ScriptContext;
17 
18 class CXFA_ResolveNodesData {
19  public:
20   explicit CXFA_ResolveNodesData(CXFA_ScriptContext* pSC = nullptr);
21   ~CXFA_ResolveNodesData();
22 
23   CXFA_ScriptContext* m_pSC;
24   CXFA_Object* m_CurNode;
25   CFX_WideString m_wsName;
26   XFA_HashCode m_uHashName;
27   CFX_WideString m_wsCondition;
28   int32_t m_nLevel;
29   CXFA_ObjArray m_Nodes;
30   uint32_t m_dwStyles;
31   const XFA_SCRIPTATTRIBUTEINFO* m_pScriptAttribute;
32   XFA_RESOVENODE_RSTYPE m_dwFlag;
33 };
34 
35 class CXFA_ResolveProcessor {
36  public:
37   CXFA_ResolveProcessor();
38   ~CXFA_ResolveProcessor();
39 
40   int32_t Resolve(CXFA_ResolveNodesData& rnd);
41   int32_t GetFilter(const CFX_WideStringC& wsExpression,
42                     int32_t nStart,
43                     CXFA_ResolveNodesData& rnd);
44   int32_t SetResultCreateNode(XFA_RESOLVENODE_RS& resolveNodeRS,
45                               CFX_WideString& wsLastCondition);
46   void SetIndexDataBind(CFX_WideString& wsNextCondition,
47                         int32_t& iIndex,
48                         int32_t iCount);
SetCurStart(int32_t start)49   void SetCurStart(int32_t start) { m_iCurStart = start; }
50 
GetNodeHelper()51   CXFA_NodeHelper* GetNodeHelper() const { return m_pNodeHelper.get(); }
52 
53  private:
54   int32_t ResolveForAttributeRs(CXFA_Object* curNode,
55                                 CXFA_ResolveNodesData& rnd,
56                                 const CFX_WideStringC& strAttr);
57   int32_t ResolveAnyChild(CXFA_ResolveNodesData& rnd);
58   int32_t ResolveDollar(CXFA_ResolveNodesData& rnd);
59   int32_t ResolveExcalmatory(CXFA_ResolveNodesData& rnd);
60   int32_t ResolveNumberSign(CXFA_ResolveNodesData& rnd);
61   int32_t ResolveAsterisk(CXFA_ResolveNodesData& rnd);
62   int32_t ResolveNormal(CXFA_ResolveNodesData& rnd);
63   int32_t ResolvePopStack(CFX_ArrayTemplate<int32_t>& stack);
64   void SetStylesForChild(uint32_t dwParentStyles, CXFA_ResolveNodesData& rnd);
65 
66   void ConditionArray(int32_t iCurIndex,
67                       CFX_WideString wsCondition,
68                       int32_t iFoundCount,
69                       CXFA_ResolveNodesData& rnd);
70   void DoPredicateFilter(int32_t iCurIndex,
71                          CFX_WideString wsCondition,
72                          int32_t iFoundCount,
73                          CXFA_ResolveNodesData& rnd);
74   void FilterCondition(CXFA_ResolveNodesData& rnd, CFX_WideString wsCondition);
75 
76   int32_t m_iCurStart;
77   std::unique_ptr<CXFA_NodeHelper> m_pNodeHelper;
78 };
79 
80 #endif  // XFA_FXFA_PARSER_CXFA_RESOLVEPROCESSOR_H_
81