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 CORE_SRC_FPDFDOC_TAGGED_INT_H_
8 #define CORE_SRC_FPDFDOC_TAGGED_INT_H_
9 
10 #include "../../include/fpdfdoc/fpdf_tagged.h"
11 
12 class CPDF_StructElementImpl;
13 class CPDF_StructTreeImpl : public CPDF_StructTree
14 {
15 public:
16     CPDF_StructTreeImpl(const CPDF_Document* pDoc);
17     ~CPDF_StructTreeImpl();
CountTopElements()18     int			CountTopElements() const
19     {
20         return m_Kids.GetSize();
21     }
GetTopElement(int i)22     CPDF_StructElement*	GetTopElement(int i) const
23     {
24         return (CPDF_StructElement*)m_Kids.GetAt(i);
25     }
26     void		LoadDocTree();
27     void		LoadPageTree(const CPDF_Dictionary* pPageDict);
28     CPDF_StructElementImpl* AddPageNode(CPDF_Dictionary* pElement, CFX_MapPtrToPtr& map, int nLevel = 0);
29     FX_BOOL		AddTopLevelNode(CPDF_Dictionary* pDict, CPDF_StructElementImpl* pElement);
30 protected:
31     const CPDF_Dictionary*	m_pTreeRoot;
32     const CPDF_Dictionary*	m_pRoleMap;
33     const CPDF_Dictionary*	m_pPage;
34     CFX_ArrayTemplate<CPDF_StructElementImpl*>	m_Kids;
35     friend class CPDF_StructElementImpl;
36 };
37 class CPDF_StructElementImpl FX_FINAL : public CPDF_StructElement
38 {
39 public:
40     CPDF_StructElementImpl(CPDF_StructTreeImpl* pTree, CPDF_StructElementImpl* pParent, CPDF_Dictionary* pDict);
GetTree()41     CPDF_StructTree*		GetTree() const
42     {
43         return m_pTree;
44     }
GetType()45     const CFX_ByteString&	GetType() const
46     {
47         return m_Type;
48     }
GetParent()49     CPDF_StructElement*		GetParent() const
50     {
51         return m_pParent;
52     }
GetDict()53     CPDF_Dictionary *		GetDict() const
54     {
55         return m_pDict;
56     }
CountKids()57     int						CountKids() const
58     {
59         return m_Kids.GetSize();
60     }
GetKid(int index)61     const CPDF_StructKid&	GetKid(int index) const
62     {
63         return m_Kids.GetData()[index];
64     }
GetObjectArray()65     CFX_PtrArray*			GetObjectArray()
66     {
67         return &m_ObjectArray;
68     }
69 
70     CPDF_Object*			GetAttr(FX_BSTR owner, FX_BSTR name, FX_BOOL bInheritable = FALSE, FX_FLOAT fLevel = 0.0F);
71 
72     CFX_ByteString			GetName(FX_BSTR owner, FX_BSTR name, FX_BSTR default_value, FX_BOOL bInheritable = FALSE, int subindex = -1);
73     FX_ARGB					GetColor(FX_BSTR owner, FX_BSTR name, FX_ARGB default_value, FX_BOOL bInheritable = FALSE, int subindex = -1);
74     FX_FLOAT				GetNumber(FX_BSTR owner, FX_BSTR name, FX_FLOAT default_value, FX_BOOL bInheritable = FALSE, int subindex = -1);
75     int						GetInteger(FX_BSTR owner, FX_BSTR name, int default_value, FX_BOOL bInheritable = FALSE, int subindex = -1);
76     CFX_PtrArray			m_ObjectArray;
77     void					LoadKids(CPDF_Dictionary* pDict);
78     void					LoadKid(FX_DWORD PageObjNum, CPDF_Object* pObj, CPDF_StructKid* pKid);
79     CPDF_Object*			GetAttr(FX_BSTR owner, FX_BSTR name, FX_BOOL bInheritable, int subindex);
80     CPDF_StructElementImpl*	Retain();
81     void					Release();
82 protected:
83     ~CPDF_StructElementImpl();
84 
85     CPDF_StructTreeImpl*	m_pTree;
86     CFX_ByteString			m_Type;
87     CPDF_StructElementImpl*	m_pParent;
88     CPDF_Dictionary*		m_pDict;
89     CFX_ArrayTemplate<CPDF_StructKid>	m_Kids;
90     int			m_RefCount;
91 
92     friend class CPDF_StructTreeImpl;
93 };
94 
95 #endif  // CORE_SRC_FPDFDOC_TAGGED_INT_H_
96