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_
9class CPDF_StructTree;
10class CPDF_StructElement;
11struct CPDF_StructKid;
12class CPDF_Document;
13class CPDF_Page;
14class IPDF_ReflowEngine;
15class IPDF_ReflowedPage;
16class CPDF_StructTree : public CFX_Object
17{
18public:
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};
30struct 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};
68class CPDF_StructElement : public CFX_Object
69{
70public:
71
72    virtual CPDF_StructTree*	GetTree() const = 0;
73
74    virtual const CFX_ByteString&	GetType() const = 0;
75
76    virtual CPDF_StructElement*	GetParent() const = 0;
77
78    virtual CPDF_Dictionary *	GetDict() const = 0;
79
80    virtual int					CountKids() const = 0;
81
82    virtual const CPDF_StructKid&	GetKid(int index) const = 0;
83
84    virtual CFX_PtrArray*		GetObjectArray() = 0;
85
86    virtual CPDF_Object*		GetAttr(FX_BSTR owner, FX_BSTR name, FX_BOOL bInheritable = FALSE, FX_FLOAT fLevel = 0.0F) = 0;
87
88
89
90    virtual CFX_ByteString		GetName(FX_BSTR owner, FX_BSTR name, FX_BSTR default_value, FX_BOOL bInheritable = FALSE, int subindex = -1) = 0;
91
92    virtual FX_ARGB				GetColor(FX_BSTR owner, FX_BSTR name, FX_ARGB default_value, FX_BOOL bInheritable = FALSE, int subindex = -1) = 0;
93
94    virtual FX_FLOAT			GetNumber(FX_BSTR owner, FX_BSTR name, FX_FLOAT default_value, FX_BOOL bInheritable = FALSE, int subindex = -1) = 0;
95
96    virtual int					GetInteger(FX_BSTR owner, FX_BSTR name, int default_value, FX_BOOL bInheritable = FALSE, int subindex = -1) = 0;
97
98};
99#endif
100