a5862e0a8f8149ea58d5e26f28b66215a8b54804
[pdfium.git] / core / include / fpdfdoc / fpdf_tagged.h
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 _FPDF_TAGGED_H_
8 #define _FPDF_TAGGED_H_
9 class CPDF_StructTree;
10 class CPDF_StructElement;
11 struct CPDF_StructKid;
12 class CPDF_Document;
13 class CPDF_Page;
14 class IPDF_ReflowEngine;
15 class IPDF_ReflowedPage;
16 class CPDF_StructTree 
17 {
18 public:
19
20     static CPDF_StructTree* LoadDoc(const CPDF_Document* pDoc);
21
22     static CPDF_StructTree* LoadPage(const CPDF_Document* pDoc, const CPDF_Dictionary* pPageDict);
23
24     virtual ~CPDF_StructTree() {}
25
26     virtual int                 CountTopElements() const = 0;
27
28     virtual CPDF_StructElement* GetTopElement(int i) const = 0;
29 };
30 struct CPDF_StructKid {
31     enum {
32         Invalid,
33         Element,
34         PageContent,
35         StreamContent,
36         Object
37     } m_Type;
38
39     union {
40         struct {
41
42             CPDF_StructElement* m_pElement;
43
44             CPDF_Dictionary*    m_pDict;
45         } m_Element;
46         struct {
47
48             FX_DWORD                    m_PageObjNum;
49
50             FX_DWORD                    m_ContentId;
51         } m_PageContent;
52         struct {
53
54             FX_DWORD                    m_PageObjNum;
55
56             FX_DWORD                    m_ContentId;
57
58             FX_DWORD                    m_RefObjNum;
59         } m_StreamContent;
60         struct {
61
62             FX_DWORD                    m_PageObjNum;
63
64             FX_DWORD                    m_RefObjNum;
65         } m_Object;
66     };
67 };
68 class CPDF_StructElement 
69 {
70 public:
71     virtual ~CPDF_StructElement() { }
72
73     virtual CPDF_StructTree*    GetTree() const = 0;
74
75     virtual const CFX_ByteString&       GetType() const = 0;
76
77     virtual CPDF_StructElement* GetParent() const = 0;
78
79     virtual CPDF_Dictionary *   GetDict() const = 0;
80
81     virtual int                                 CountKids() const = 0;
82
83     virtual const CPDF_StructKid&       GetKid(int index) const = 0;
84
85     virtual CFX_PtrArray*               GetObjectArray() = 0;
86
87     virtual CPDF_Object*                GetAttr(FX_BSTR owner, FX_BSTR name, FX_BOOL bInheritable = FALSE, FX_FLOAT fLevel = 0.0F) = 0;
88
89
90
91     virtual CFX_ByteString              GetName(FX_BSTR owner, FX_BSTR name, FX_BSTR default_value, FX_BOOL bInheritable = FALSE, int subindex = -1) = 0;
92
93     virtual FX_ARGB                             GetColor(FX_BSTR owner, FX_BSTR name, FX_ARGB default_value, FX_BOOL bInheritable = FALSE, int subindex = -1) = 0;
94
95     virtual FX_FLOAT                    GetNumber(FX_BSTR owner, FX_BSTR name, FX_FLOAT default_value, FX_BOOL bInheritable = FALSE, int subindex = -1) = 0;
96
97     virtual int                                 GetInteger(FX_BSTR owner, FX_BSTR name, int default_value, FX_BOOL bInheritable = FALSE, int subindex = -1) = 0;
98
99 };
100 #endif