| // Copyright 2017 PDFium Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | |
| #ifndef XFA_FXFA_PARSER_CXFA_OBJECT_H_ | |
| #define XFA_FXFA_PARSER_CXFA_OBJECT_H_ | |
| #include <memory> | |
| #include "core/fxcrt/fx_string.h" | |
| #include "fxjs/fxjse.h" | |
| #include "xfa/fxfa/fxfa_basic.h" | |
| enum class XFA_ObjectType { | |
| Object, | |
| List, | |
| NodeList, | |
| Node, | |
| NodeC, | |
| NodeV, | |
| ModelNode, | |
| TextNode, | |
| ContainerNode, | |
| ContentNode, | |
| VariablesThis | |
| }; | |
| class CJX_Object; | |
| class CXFA_Document; | |
| class CXFA_Node; | |
| class CXFA_NodeList; | |
| class CXFA_Object : public CFXJSE_HostObject { | |
| public: | |
| ~CXFA_Object() override; | |
| CXFA_Document* GetDocument() const { return m_pDocument.Get(); } | |
| XFA_ObjectType GetObjectType() const { return m_objectType; } | |
| bool IsNode() const { | |
| return m_objectType == XFA_ObjectType::Node || | |
| m_objectType == XFA_ObjectType::NodeC || | |
| m_objectType == XFA_ObjectType::NodeV || | |
| m_objectType == XFA_ObjectType::ModelNode || | |
| m_objectType == XFA_ObjectType::TextNode || | |
| m_objectType == XFA_ObjectType::ContainerNode || | |
| m_objectType == XFA_ObjectType::ContentNode || | |
| m_objectType == XFA_ObjectType::VariablesThis; | |
| } | |
| bool IsNodeList() const { return m_objectType == XFA_ObjectType::NodeList; } | |
| bool IsContentNode() const { | |
| return m_objectType == XFA_ObjectType::ContentNode; | |
| } | |
| bool IsContainerNode() const { | |
| return m_objectType == XFA_ObjectType::ContainerNode; | |
| } | |
| bool IsModelNode() const { return m_objectType == XFA_ObjectType::ModelNode; } | |
| bool IsNodeV() const { return m_objectType == XFA_ObjectType::NodeV; } | |
| bool IsVariablesThis() const { | |
| return m_objectType == XFA_ObjectType::VariablesThis; | |
| } | |
| CXFA_Node* AsNode(); | |
| CXFA_NodeList* AsNodeList(); | |
| const CXFA_Node* AsNode() const; | |
| const CXFA_NodeList* AsNodeList() const; | |
| CJX_Object* JSObject() { return m_pJSObject.get(); } | |
| const CJX_Object* JSObject() const { return m_pJSObject.get(); } | |
| XFA_Element GetElementType() const { return m_elementType; } | |
| WideStringView GetClassName() const { return m_elementName; } | |
| uint32_t GetClassHashCode() const { return m_elementNameHash; } | |
| protected: | |
| CXFA_Object(CXFA_Document* pDocument, | |
| XFA_ObjectType objectType, | |
| XFA_Element eType, | |
| const WideStringView& elementName, | |
| std::unique_ptr<CJX_Object> jsObject); | |
| UnownedPtr<CXFA_Document> const m_pDocument; | |
| const XFA_ObjectType m_objectType; | |
| const XFA_Element m_elementType; | |
| const uint32_t m_elementNameHash; | |
| const WideStringView m_elementName; | |
| std::unique_ptr<CJX_Object> m_pJSObject; | |
| }; | |
| CXFA_Node* ToNode(CXFA_Object* pObj); | |
| const CXFA_Node* ToNode(const CXFA_Object* pObj); | |
| #endif // XFA_FXFA_PARSER_CXFA_OBJECT_H_ |