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