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 LayoutProvider_TaggedPDF_H
8#define LayoutProvider_TaggedPDF_H
9#include "../../include/reflow/reflowengine.h"
10class CPDF_LayoutElement : public IPDF_LayoutElement, public CFX_Object
11{
12public:
13    CPDF_LayoutElement();
14    ~CPDF_LayoutElement();
15
16    LayoutType	GetType();
17    void	GetRect(CFX_FloatRect& rcRect) {};
18
19    int		CountAttrValues(LayoutAttr attr_type);
20
21    LayoutEnum	GetEnumAttr(LayoutAttr attr_type, int index);
22    FX_FLOAT	GetNumberAttr(LayoutAttr attr_type, int index);
23    FX_COLORREF	GetColorAttr(LayoutAttr attr_type, int index);
24
25    int		CountChildren();
26
27    IPDF_LayoutElement* GetChild(int index);
28
29    IPDF_LayoutElement* GetParent();
30
31    int	CountObjects();
32    CPDF_PageObject*	GetObject(int index);
33    FX_BOOL AddObject(CPDF_PageObject* pObj);
34    CPDF_StructElement* m_pTaggedElement;
35    CPDF_LayoutElement* m_pParentElement;
36    CFX_PtrArray	m_ChildArray;
37    LayoutType ConvertLayoutType(FX_BSTR name);
38    CFX_ByteStringC ConvertLayoutType(LayoutType type);
39    CFX_ByteStringC ConvertLayoutAttr(LayoutAttr attr);
40    LayoutEnum ConvertLayoutEnum(CFX_ByteStringC Enum);
41
42protected:
43    FX_BOOL		IsInheritable(LayoutAttr attr_type);
44    CFX_ByteStringC GetAttrOwner(LayoutAttr attr_type);
45    CFX_ByteStringC GetDefaultNameValue(LayoutAttr attr_type);
46    FX_FLOAT		GetDefaultFloatValue(LayoutAttr attr_type);
47    FX_COLORREF		GetDefaultColorValue(LayoutAttr attr_type);
48    CFX_PtrArray	m_ObjArray;
49};
50class CPDF_LayoutProvider_TaggedPDF : public IPDF_LayoutProvider, public CFX_Object
51{
52public:
53    CPDF_LayoutProvider_TaggedPDF();
54    ~CPDF_LayoutProvider_TaggedPDF();
55    void			SetLayoutProviderStyle(LAYOUTPROVIDER_STYLE style) {};
56
57    void	Init(CPDF_PageObjects* pPage)
58    {
59        m_pPage = pPage;
60        m_Status = LayoutReady;
61    };
62
63    LayoutStatus	StartLoad(IFX_Pause* pPause = NULL);
64    LayoutStatus	Continue();
65    int		 		GetPosition();
66
67    IPDF_LayoutElement* GetRoot()
68    {
69        return m_pRoot;
70    };
71
72protected:
73    void ProcessElement(CPDF_LayoutElement*pParent, CPDF_StructElement* pTaggedElement);
74    LayoutStatus	m_Status;
75    CPDF_StructElement* m_pCurTaggedElement;
76    CPDF_LayoutElement* m_pRoot;
77    IFX_Pause*			m_pPause;
78    CPDF_PageObjects*	m_pPage;
79    CPDF_StructTree*	m_pPageTree;
80    int					m_TopElementIndex;
81};
82#endif
83