1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved.
2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Use of this source code is governed by a BSD-style license that can be
3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// found in the LICENSE file.
4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef _FPDF_TAGGED_H_
8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define _FPDF_TAGGED_H_
9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_StructTree;
10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_StructElement;
11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovstruct CPDF_StructKid;
12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_Document;
13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_Page;
14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass IPDF_ReflowEngine;
15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass IPDF_ReflowedPage;
16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_StructTree : public CFX_Object
17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    static CPDF_StructTree* LoadDoc(const CPDF_Document* pDoc);
21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    static CPDF_StructTree* LoadPage(const CPDF_Document* pDoc, const CPDF_Dictionary* pPageDict);
23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    virtual ~CPDF_StructTree() {}
25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    virtual int			CountTopElements() const = 0;
27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    virtual CPDF_StructElement*	GetTopElement(int i) const = 0;
29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovstruct CPDF_StructKid {
31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    enum {
32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        Invalid,
33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        Element,
34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        PageContent,
35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        StreamContent,
36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        Object
37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } m_Type;
38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    union {
40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        struct {
41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            CPDF_StructElement*	m_pElement;
43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            CPDF_Dictionary*	m_pDict;
45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        } m_Element;
46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        struct {
47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            FX_DWORD			m_PageObjNum;
49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            FX_DWORD			m_ContentId;
51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        } m_PageContent;
52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        struct {
53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            FX_DWORD			m_PageObjNum;
55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            FX_DWORD			m_ContentId;
57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            FX_DWORD			m_RefObjNum;
59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        } m_StreamContent;
60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        struct {
61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            FX_DWORD			m_PageObjNum;
63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            FX_DWORD			m_RefObjNum;
65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        } m_Object;
66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    };
67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_StructElement : public CFX_Object
69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    virtual CPDF_StructTree*	GetTree() const = 0;
73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    virtual const CFX_ByteString&	GetType() const = 0;
75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    virtual CPDF_StructElement*	GetParent() const = 0;
77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    virtual CPDF_Dictionary *	GetDict() const = 0;
79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    virtual int					CountKids() const = 0;
81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    virtual const CPDF_StructKid&	GetKid(int index) const = 0;
83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    virtual CFX_PtrArray*		GetObjectArray() = 0;
85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    virtual CPDF_Object*		GetAttr(FX_BSTR owner, FX_BSTR name, FX_BOOL bInheritable = FALSE, FX_FLOAT fLevel = 0.0F) = 0;
87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    virtual CFX_ByteString		GetName(FX_BSTR owner, FX_BSTR name, FX_BSTR default_value, FX_BOOL bInheritable = FALSE, int subindex = -1) = 0;
91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    virtual FX_ARGB				GetColor(FX_BSTR owner, FX_BSTR name, FX_ARGB default_value, FX_BOOL bInheritable = FALSE, int subindex = -1) = 0;
93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    virtual FX_FLOAT			GetNumber(FX_BSTR owner, FX_BSTR name, FX_FLOAT default_value, FX_BOOL bInheritable = FALSE, int subindex = -1) = 0;
95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    virtual int					GetInteger(FX_BSTR owner, FX_BSTR name, int default_value, FX_BOOL bInheritable = FALSE, int subindex = -1) = 0;
97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
100