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#include "layoutprovider_taggedpdf.h"
8ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDF_LayoutElement::CPDF_LayoutElement()
9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    m_pTaggedElement = NULL;
11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    m_pParentElement = NULL;
12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
13ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDF_LayoutElement::~CPDF_LayoutElement()
14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    m_ObjArray.RemoveAll();
16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    int size = m_ChildArray.GetSize();
17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    for(int i = 0; i < size; i++) {
18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        CPDF_LayoutElement* pChild = (CPDF_LayoutElement*)m_ChildArray.GetAt(i);
19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        delete pChild;
20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        pChild = NULL;
21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    m_ChildArray.RemoveAll();
23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
24ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovLayoutType CPDF_LayoutElement::ConvertLayoutType(FX_BSTR name)
25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if(name == (const char*)("Document")) {
27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutDocument;
28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("Part")) {
29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutPart;
30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("Art")) {
31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutArt;
32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("Sect")) {
33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutSect;
34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("Div")) {
35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutDiv;
36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("BlockQuote")) {
37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutBlockQuote;
38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("Caption")) {
39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutCaption;
40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("TOC")) {
41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutTOC;
42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("TOCI")) {
43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutTOCI;
44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("Index")) {
45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutIndex;
46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("NonStruct")) {
47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutNonStruct;
48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("Private")) {
49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutPrivate;
50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("P")) {
51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutParagraph;
52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("H")) {
53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutHeading;
54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("H1")) {
55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutHeading1;
56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("H2")) {
57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutHeading2;
58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("H3")) {
59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutHeading3;
60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("H4")) {
61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutHeading4;
62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("H5")) {
63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutHeading5;
64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("H6")) {
65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutHeading6;
66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("L")) {
67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutList;
68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("LI")) {
69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutListItem;
70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("Lbl")) {
71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutListLabel;
72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("LBody")) {
73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutListBody;
74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("Table")) {
75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutTable;
76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("TR")) {
77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutTableRow;
78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("TH")) {
79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutTableHeaderCell;
80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("TD")) {
81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutTableDataCell;
82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("THead")) {
83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutTableHeaderGroup;
84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("TBody")) {
85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutTableBodyGroup;
86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("TFoot")) {
87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutTableFootGroup;
88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("Span")) {
89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutSpan;
90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("Quote")) {
91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutQuote;
92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("Note")) {
93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutNote;
94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("Reference")) {
95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutReference;
96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("BibEntry")) {
97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutBibEntry;
98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("Code")) {
99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutCode;
100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("Link")) {
101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutLink;
102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("Annot")) {
103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutAnnot;
104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("Ruby")) {
105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutRuby;
106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("RB")) {
107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutRubyBase;
108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("RT")) {
109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutRubyAnnot;
110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("RP")) {
111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutRubyPunc;
112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("Warichu")) {
113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutWarichu;
114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("WT")) {
115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutWarichuText;
116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("WP")) {
117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutWarichuPunc;
118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("Figure")) {
119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutFigure;
120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("Formula")) {
121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutFormula;
122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if(name == (const char*)("Form")) {
123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutForm;
124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else {
125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutUnknown;
126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
128ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_ByteStringC CPDF_LayoutElement::ConvertLayoutType(LayoutType type)
129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_BSTR name = "";
131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if(type == LayoutArifact) {
132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "Arifact";
133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutDocument) {
134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "Document";
135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutPart) {
136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "Part";
137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutArt) {
138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "Art";
139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutSect) {
140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "Sect";
141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutDiv) {
142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "Div";
143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutBlockQuote) {
144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "BlockQuote";
145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutCaption) {
146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "Caption";
147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutTOC) {
148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "TOC";
149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutTOCI) {
150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "TOCI";
151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutIndex) {
152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "Index";
153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutNonStruct) {
154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "NonStruct";
155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutPrivate) {
156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "Private";
157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutParagraph) {
158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "P";
159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutHeading) {
160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "H";
161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutHeading1) {
162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "H1";
163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutHeading2) {
164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "H2";
165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutHeading3) {
166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "H3";
167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutHeading4) {
168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "H4";
169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutHeading5) {
170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "H5";
171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutHeading6) {
172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "H6";
173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutList) {
174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "L";
175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutListItem) {
176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "LI";
177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutListLabel) {
178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "Lbl";
179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutListBody) {
180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "LBody";
181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutTable) {
182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "Table";
183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutTableRow) {
184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "TR";
185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutTableHeaderCell) {
186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "TH";
187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutTableDataCell) {
188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "TD";
189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutTableHeaderGroup) {
190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "THead";
191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutTableBodyGroup) {
192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "TBody";
193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutTableFootGroup) {
194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "TFoot";
195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutSpan) {
196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "Span";
197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutQuote) {
198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "Quote";
199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutNote) {
200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "Note";
201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutReference) {
202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "Reference";
203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutBibEntry) {
204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "BibEntry";
205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutCode) {
206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "Code";
207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutLink) {
208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "Link";
209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutAnnot) {
210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "Annot";
211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutRuby) {
212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "Ruby";
213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutRubyBase) {
214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "RB";
215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutRubyAnnot) {
216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "RT";
217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutRubyPunc) {
218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "RP";
219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutWarichu) {
220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "Warichu";
221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutWarichuText) {
222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "WT";
223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutWarichuPunc) {
224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "WP";
225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutFigure) {
226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "Figure";
227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutFormula) {
228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "Formula";
229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if( type == LayoutForm) {
230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return "Form";
231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return name;
233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
234ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_ByteStringC CPDF_LayoutElement::ConvertLayoutAttr(LayoutAttr attr)
235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    switch(attr) {
237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutArtifactType:
238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "Type";
239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutArtifactAttached:
240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "Attached";
241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutArtifactSubType:
242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "Subtype";
243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutPlacement:
244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "Placement";
245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutWritingMode:
246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "WritingMode";
247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutBackgroundColor:
248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "BackgroundColor";
249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutBorderColor:
250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "BorderColor";
251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutBorderStyle:
252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "BorderStyle";
253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutBorderThickness:
254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "BorderThickness";
255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutPadding:
256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "Padding";
257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutColor:
258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "Color";
259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutSpaceBefore:
260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "SpaceBefore";
261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutSpaceAfter:
262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "SpaceAfter";
263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutStartIndent:
264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "StartIndent";
265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutEndIndent:
266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "EndIndent";
267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutTextIndent:
268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "TextIndent";
269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutTextAlign:
270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "TextAlign";
271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutBBox:
272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "BBox";
273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutWidth:
274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "Width";
275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutHeight:
276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "Height";
277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutBlockAlign:
278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "BlockAlign";
279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutInlineAlign:
280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "InlineAlign";
281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutTBorderStyle:
282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "TBorderStyle";
283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutTPadding:
284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "TPadding";
285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutBaselineShift:
286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "BaselineShift";
287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutLineHeight:
288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "LineHeight";
289ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutTextDecorationColor:
290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "TextDecorationColor";
291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutTextDecorationThickness:
292ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "TextDecorationThickness";
293ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutTextDecorationType:
294ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "TextDecorationType";
295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutRubyAlign:
296ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "RubyAlign";
297ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutRubyPosition:
298ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "RubyPosition";
299ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutGlyphOrientationVertical:
300ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "GlyphOrientationVertical";
301ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutColumnCount:
302ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "ColumnCount";
303ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutColumnGap:
304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "ColumnGap";
305ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutColumnWidths:
306ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "ColumnWidths";
307ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutListNumbering:
308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "ListNumbering";
309ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutFieldRole:
310ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "Role";
311ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutFieldChecked:
312ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "checked";
313ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutFieldDesc:
314ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "Desc";
315ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutRowSpan:
316ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "RowSpan";
317ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutColSpan:
318ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "ColSpan";
319ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutTableHeaders:
320ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "Headers";
321ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutTableHeaderScope:
322ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "Scope";
323ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutTableSummary:
324ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "Summary";
325ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        default:
326ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "";
327ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
328ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
329ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovLayoutEnum CPDF_LayoutElement::ConvertLayoutEnum(CFX_ByteStringC Enum)
330ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
331ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if(Enum == "Block") {
332ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutBlock;
333ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "Inline") {
334ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutInline;
335ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "Before") {
336ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutBefore;
337ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "Start") {
338ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutStart;
339ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "End") {
340ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutEnd;
341ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "LrTb") {
342ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutLrTb;
343ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "RlTb") {
344ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutRlTb;
345ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "TbRl") {
346ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutTbRl;
347ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "None") {
348ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutNone;
349ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "Hidden") {
350ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutHidden;
351ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "Dotted") {
352ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutDotted;
353ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "Dashed") {
354ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutDashed;
355ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "Solid") {
356ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutSolid;
357ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "Double") {
358ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutDouble;
359ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "Groove") {
360ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutGroove;
361ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "Ridge") {
362ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutRidge;
363ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "Inset") {
364ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutInset;
365ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "Outset") {
366ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutOutset;
367ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "Normal") {
368ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutNormal;
369ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "Auto") {
370ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutAuto;
371ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "Center") {
372ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutCenter;
373ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "Justify") {
374ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutJustify;
375ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "Middle") {
376ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutMiddle;
377ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "Underline") {
378ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutUnderline;
379ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "Overline") {
380ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutOverline;
381ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "LineThrough") {
382ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutLineThrough;
383ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "Distribute") {
384ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutDistribute;
385ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "Disc") {
386ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutDisc;
387ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "Circle") {
388ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutCircle;
389ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "Square") {
390ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutSquare;
391ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "Decimal") {
392ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutDecimal;
393ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "UpperRoman") {
394ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutUpperRoman;
395ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "LowerRoman") {
396ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutLowerRoman;
397ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "UpperAlpha") {
398ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutUpperAlpha;
399ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "LowerAlpha") {
400ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutLowerAlpha;
401ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "rb") {
402ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutRB;
403ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "cb") {
404ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutCB;
405ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "pb") {
406ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutPB;
407ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "tv") {
408ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutTV;
409ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "on") {
410ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutOn;
411ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "off") {
412ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutOff;
413ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "neutral") {
414ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutNeutral;
415ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "Row") {
416ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutRow;
417ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "Column") {
418ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutColumn;
419ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "Both") {
420ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutBoth;
421ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "Left") {
422ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutLeft;
423ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "Top") {
424ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutTop;
425ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "Bottom") {
426ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutBottom;
427ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "Right") {
428ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutRight;
429ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "Pagination") {
430ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutPagination;
431ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "Layout") {
432ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutLayout;
433ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "Page") {
434ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutPage;
435ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "Background") {
436ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutBackground;
437ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "Header") {
438ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutHeader;
439ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "Footer") {
440ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutFooter;
441ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (Enum == "Watermark") {
442ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutWatermark;
443ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else {
444ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutInvalid;
445ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
446ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
447ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovLayoutType CPDF_LayoutElement::GetType()
448ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
449ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if(!m_pTaggedElement) {
450ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutUnknown;
451ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
452ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_ByteString name = m_pTaggedElement->GetType();
453ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return this->ConvertLayoutType(name);
454ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
455ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovint	CPDF_LayoutElement::CountAttrValues(LayoutAttr attr_type)
456ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
457ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if(!m_pTaggedElement) {
458ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return 0;
459ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
460ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Object* pObj = m_pTaggedElement->GetAttr(GetAttrOwner(attr_type), ConvertLayoutAttr(attr_type), IsInheritable(attr_type));
461ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if(pObj) {
462ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return 1;
463ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else {
464ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return 0;
465ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
466ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
467ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovLayoutEnum CPDF_LayoutElement::GetEnumAttr(LayoutAttr attr_type, int index)
468ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
469ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if(!m_pTaggedElement) {
470ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutInvalid;
471ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
472ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_ByteStringC owner = GetAttrOwner(attr_type);
473ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_ByteStringC default_value = GetDefaultNameValue(attr_type);
474ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_ByteStringC AttrName = ConvertLayoutAttr(attr_type);
475ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_ByteString	AttrValue = m_pTaggedElement->GetName(owner, AttrName, default_value, IsInheritable(attr_type), index);
476ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return ConvertLayoutEnum(AttrValue);
477ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
478ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_ByteStringC CPDF_LayoutElement::GetAttrOwner(LayoutAttr attr_type)
479ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
480ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    switch(attr_type) {
481ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutListNumbering:
482ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "List";
483ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutFieldRole:
484ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutFieldChecked :
485ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutFieldDesc:
486ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "PrintField";
487ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutRowSpan:
488ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutColSpan:
489ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutTableHeaders:
490ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutTableHeaderScope:
491ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutTableSummary:
492ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "Table";
493ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        default:
494ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "Layout";
495ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
496ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
497ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_FLOAT	CPDF_LayoutElement::GetNumberAttr(LayoutAttr attr_type, int index)
498ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
499ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if(!m_pTaggedElement) {
500ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return 0;
501ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
502ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_ByteStringC owner = GetAttrOwner(attr_type);
503ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_FLOAT default_value = GetDefaultFloatValue(attr_type);
504ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_ByteStringC AttrName = ConvertLayoutAttr(attr_type);
505ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_FLOAT f = m_pTaggedElement->GetNumber(owner, AttrName, default_value, IsInheritable(attr_type), index);
506ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if(attr_type == LayoutWidth && !f) {
507ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        f = m_pTaggedElement->GetNumber("Table", AttrName, default_value, IsInheritable(attr_type), index);
508ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
509ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return f;
510ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
511ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_COLORREF	CPDF_LayoutElement::GetColorAttr(LayoutAttr attr_type, int index)
512ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
513ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if(!m_pTaggedElement) {
514ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return 0;
515ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
516ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_ByteStringC owner = GetAttrOwner(attr_type);
517ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_COLORREF default_value = GetDefaultColorValue(attr_type);
518ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_ByteStringC AttrName = ConvertLayoutAttr(attr_type);
519ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_ARGB f = m_pTaggedElement->GetColor(owner, AttrName, default_value, IsInheritable(attr_type), index);
520ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return f;
521ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
522ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_FLOAT CPDF_LayoutElement::GetDefaultFloatValue(LayoutAttr attr_type)
523ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
524ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    switch(attr_type) {
525ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutColumnCount:
526ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return 1;
527ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutRowSpan:
528ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return 1;
529ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutColSpan:
530ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return 1;
531ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        default:
532ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return 0;
533ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
534ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
535ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_COLORREF CPDF_LayoutElement::GetDefaultColorValue(LayoutAttr attr_type)
536ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
537ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return -1;
538ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
539ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_ByteStringC CPDF_LayoutElement::GetDefaultNameValue(LayoutAttr attr_type)
540ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
541ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    switch(attr_type) {
542ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutPlacement:
543ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "Inline";
544ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutWritingMode:
545ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "LrTb";
546ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutBorderStyle:
547ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "None";
548ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutTextAlign:
549ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "Start";
550ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutBlockAlign:
551ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "Before";
552ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutInlineAlign:
553ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "Start";
554ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutTBorderStyle:
555ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "None";
556ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutTextDecorationType:
557ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "None";
558ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutRubyAlign:
559ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "Distribute";
560ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutRubyPosition:
561ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "Before";
562ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutGlyphOrientationVertical:
563ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "Auto";
564ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutListNumbering:
565ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "None";
566ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutFieldRole:
567ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "None";
568ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        default:
569ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return "";
570ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
571ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
572ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL	CPDF_LayoutElement::IsInheritable(LayoutAttr type)
573ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
574ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    switch(type) {
575ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutWritingMode:
576ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutTextAlign:
577ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutBlockAlign:
578ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutInlineAlign:
579ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutLineHeight:
580ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutGlyphOrientationVertical:
581ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutRubyAlign:
582ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutRubyPosition:
583ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutBorderThickness:
584ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutStartIndent:
585ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutEndIndent:
586ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutTextIndent:
587ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutTPadding:
588ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutTextDecorationThickness:
589ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutBorderColor:
590ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutColor:
591ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        case LayoutTextDecorationColor:
592ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return TRUE;
593ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        default:
594ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return FALSE;
595ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
596ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
597ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovint	CPDF_LayoutElement::CountChildren()
598ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
599ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return m_ChildArray.GetSize();
600ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
601ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovIPDF_LayoutElement* CPDF_LayoutElement::GetChild(int index)
602ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
603ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return (IPDF_LayoutElement*)m_ChildArray.GetAt(index);
604ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
605ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovIPDF_LayoutElement* CPDF_LayoutElement::GetParent()
606ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
607ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return m_pParentElement;
608ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
609ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovint	CPDF_LayoutElement::CountObjects()
610ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
611ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if(m_pTaggedElement == NULL) {
612ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return 0;
613ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
614ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_PtrArray* pObj = &m_ObjArray;
615ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    int size = pObj->GetSize();
616ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return size;
617ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
618ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDF_PageObject* CPDF_LayoutElement::GetObject(int index)
619ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
620ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if(m_pTaggedElement == NULL) {
621ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return NULL;
622ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
623ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_PtrArray *pObj = &m_ObjArray;
624ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    int size = pObj->GetSize();
625ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if(index < size) {
626ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return (CPDF_PageObject*)pObj->GetAt(index);
627ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
628ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return NULL;
629ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
630ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CPDF_LayoutElement::AddObject(CPDF_PageObject* pObj)
631ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
632ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return m_ObjArray.Add(pObj);
633ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
634ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovIPDF_LayoutProvider* IPDF_LayoutProvider::Create_LayoutProvider_TaggedPDF(CPDF_PageObjects* pPage)
635ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
636ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if(pPage == NULL) {
637ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return NULL;
638ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
639e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_LayoutProvider_TaggedPDF* pProvider = new CPDF_LayoutProvider_TaggedPDF;
640ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    pProvider->Init(pPage);
641ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return pProvider;
642ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
643ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDF_LayoutProvider_TaggedPDF::CPDF_LayoutProvider_TaggedPDF()
644ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
645ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    m_pPause = NULL;
646ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    m_pRoot = NULL;
647ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    m_pPageTree = NULL;
648ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    m_pCurTaggedElement = NULL;
649ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
650ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDF_LayoutProvider_TaggedPDF::~CPDF_LayoutProvider_TaggedPDF()
651ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
652ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    m_pCurTaggedElement = NULL;
653ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    m_pPause = NULL;
654ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if(m_pRoot) {
655ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        delete m_pRoot;
656ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
657ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    m_pRoot = NULL;
658ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if(m_pPageTree) {
659ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        delete m_pPageTree;
660ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
661ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    m_pPageTree = NULL;
662ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
663ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPDF_LayoutProvider_TaggedPDF::ProcessElement(CPDF_LayoutElement*pParent, CPDF_StructElement* pTaggedElement)
664ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
665ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if(!pTaggedElement) {
666ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return;
667ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
668ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if(!pParent) {
669ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        m_Status = LayoutError;
670ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return;
671ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
672e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_LayoutElement* pElement = new CPDF_LayoutElement;
673ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    pElement->m_pParentElement = pParent;
674ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    pElement->m_pTaggedElement = pTaggedElement;
675ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    pParent->m_ChildArray.Add(pElement);
676ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    int count = pTaggedElement->CountKids();
677ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    for(int i = 0; i < count; i++) {
678ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        CPDF_StructKid Kid = pTaggedElement->GetKid(i);
679ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        switch(Kid.m_Type) {
680ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            case CPDF_StructKid::Element: {
681ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                    ProcessElement(pElement, Kid.m_Element.m_pElement);
682ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                    if(m_Status != LayoutReady) {
683ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                        return ;
684ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                    }
685ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                }
686ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                break;
687ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            case CPDF_StructKid::PageContent: {
688ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                    int count = m_pPage->CountObjects();
689ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                    FX_POSITION pos = m_pPage->GetFirstObjectPosition();
690ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                    if(!pos) {
691ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                        m_Status = LayoutError;
692ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                        return ;
693ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                    }
694ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                    while (pos) {
695ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                        CPDF_PageObject* pObj = m_pPage->GetNextObject(pos);
696ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                        int pbjMCID = pObj->m_ContentMark.GetMCID();
697ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                        if((FX_DWORD)(pObj->m_ContentMark.GetMCID()) == Kid.m_PageContent.m_ContentId) {
698ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                            pElement->AddObject(pObj);
699ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                        }
700ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                    }
701ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                }
702ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                break;
703ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            case CPDF_StructKid::StreamContent:
704ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            case CPDF_StructKid::Object:
705ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            default:
706ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                break;
707ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        }
708ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
709ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
710ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovLayoutStatus CPDF_LayoutProvider_TaggedPDF::StartLoad(IFX_Pause* pPause)
711ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
712ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    m_pPause = pPause;
713ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if(m_pPage->m_pDocument && m_pPage->m_pFormDict) {
714ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        m_pPageTree = CPDF_StructTree::LoadPage(m_pPage->m_pDocument, m_pPage->m_pFormDict);
715ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
716ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if(!m_pPageTree) {
717ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        m_Status = LayoutError;
718ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutError;
719ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
720ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    int count = m_pPageTree->CountTopElements();
721ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if(count == 0) {
722ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        m_Status = LayoutError;
723ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutError;
724ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
725e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    m_pRoot = new CPDF_LayoutElement;
726ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    for(int i = 0; i < count; i++) {
727ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        CPDF_StructElement* pElement = m_pPageTree->GetTopElement(i);
728ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        if(pElement) {
729ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            ProcessElement(m_pRoot, pElement);
730ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            if(m_Status != LayoutReady) {
731ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                return m_Status;
732ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            }
733ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        }
734ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
735ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    m_pCurTaggedElement = NULL;
736ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    m_Status = LayoutFinished;
737ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return LayoutFinished;
738ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
739ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovLayoutStatus CPDF_LayoutProvider_TaggedPDF::Continue()
740ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
741ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if(!m_pCurTaggedElement) {
742ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutError;
743ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
744ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if(m_Status != LayoutToBeContinued) {
745ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return LayoutError;
746ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
747ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    m_Status = LayoutReady;
748ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    int count = m_pPageTree->CountTopElements();
749ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    for(int i = 0; i < count; i++) {
750ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        CPDF_StructElement* pElement = m_pPageTree->GetTopElement(i);
751ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        if(pElement) {
752ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            ProcessElement(m_pRoot, pElement);
753ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            if(m_Status != LayoutReady) {
754ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                return m_Status;
755ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            }
756ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        }
757ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
758ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    m_pCurTaggedElement = NULL;
759ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    m_Status = LayoutFinished;
760ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return LayoutFinished;
761ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
762ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovint CPDF_LayoutProvider_TaggedPDF::GetPosition()
763ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
764ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if(m_TopElementIndex == 0) {
765ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return 0;
766ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
767ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    int count = m_pPageTree->CountTopElements();
768ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return m_TopElementIndex / count * 100;
769ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
770