1e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved. 2e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Use of this source code is governed by a BSD-style license that can be 3e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// found in the LICENSE file. 4ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 5e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 7e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#ifndef CORE_SRC_FPDFDOC_TAGGED_INT_H_ 8e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define CORE_SRC_FPDFDOC_TAGGED_INT_H_ 9e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 10ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "core/include/fpdfdoc/fpdf_tagged.h" 11e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 12e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_StructElementImpl; 13ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 14ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_StructTreeImpl : public CPDF_StructTree { 15ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public: 16ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann explicit CPDF_StructTreeImpl(const CPDF_Document* pDoc); 17ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ~CPDF_StructTreeImpl() override; 18ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 19ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann // CPDF_StructTree 20ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int CountTopElements() const override { return m_Kids.GetSize(); } 21ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_StructElement* GetTopElement(int i) const override { 22ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return (CPDF_StructElement*)m_Kids.GetAt(i); 23ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 24ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 25ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void LoadDocTree(); 26ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void LoadPageTree(const CPDF_Dictionary* pPageDict); 27ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_StructElementImpl* AddPageNode(CPDF_Dictionary* pElement, 28ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_MapPtrToPtr& map, 29ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int nLevel = 0); 30ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL AddTopLevelNode(CPDF_Dictionary* pDict, 31ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_StructElementImpl* pElement); 32ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 33ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann protected: 34ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CPDF_Dictionary* m_pTreeRoot; 35ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CPDF_Dictionary* m_pRoleMap; 36ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CPDF_Dictionary* m_pPage; 37ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ArrayTemplate<CPDF_StructElementImpl*> m_Kids; 38ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann friend class CPDF_StructElementImpl; 39e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}; 40e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 41ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_StructElementImpl final : public CPDF_StructElement { 42ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public: 43ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_StructElementImpl(CPDF_StructTreeImpl* pTree, 44ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_StructElementImpl* pParent, 45ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pDict); 46ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 47ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann // CPDF_StructTreeImpl 48ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_StructTree* GetTree() const override { return m_pTree; } 49ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CFX_ByteString& GetType() const override { return m_Type; } 50ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_StructElement* GetParent() const override { return m_pParent; } 51ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* GetDict() const override { return m_pDict; } 52ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int CountKids() const override { return m_Kids.GetSize(); } 53ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CPDF_StructKid& GetKid(int index) const override { 54ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_Kids.GetData()[index]; 55ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 56ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* GetAttr(const CFX_ByteStringC& owner, 57ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CFX_ByteStringC& name, 58ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bInheritable = FALSE, 59ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT fLevel = 0.0F) override; 60ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString GetName(const CFX_ByteStringC& owner, 61ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CFX_ByteStringC& name, 62ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CFX_ByteStringC& default_value, 63ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bInheritable = FALSE, 64ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int subindex = -1) override; 65ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_ARGB GetColor(const CFX_ByteStringC& owner, 66ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CFX_ByteStringC& name, 67ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_ARGB default_value, 68ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bInheritable = FALSE, 69ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int subindex = -1) override; 70ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT GetNumber(const CFX_ByteStringC& owner, 71ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CFX_ByteStringC& name, 72ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT default_value, 73ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bInheritable = FALSE, 74ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int subindex = -1) override; 75ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int GetInteger(const CFX_ByteStringC& owner, 76ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CFX_ByteStringC& name, 77ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int default_value, 78ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bInheritable = FALSE, 79ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int subindex = -1) override; 80ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 81ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void LoadKids(CPDF_Dictionary* pDict); 82ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void LoadKid(FX_DWORD PageObjNum, CPDF_Object* pObj, CPDF_StructKid* pKid); 83ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* GetAttr(const CFX_ByteStringC& owner, 84ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CFX_ByteStringC& name, 85ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bInheritable, 86ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int subindex); 87ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_StructElementImpl* Retain(); 88ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void Release(); 89e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 90ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann protected: 91ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ~CPDF_StructElementImpl() override; 92e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 93ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_StructTreeImpl* m_pTree; 94ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString m_Type; 95ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_StructElementImpl* m_pParent; 96ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* m_pDict; 97ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ArrayTemplate<CPDF_StructKid> m_Kids; 98ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int m_RefCount; 99e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 100ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann friend class CPDF_StructTreeImpl; 101e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}; 102e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 103e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#endif // CORE_SRC_FPDFDOC_TAGGED_INT_H_ 104