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