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 CORE_INCLUDE_REFLOW_FPDF_LAYOUT_H_
8 #define CORE_INCLUDE_REFLOW_FPDF_LAYOUT_H_
9 
10 class IPDF_LayoutElement;
11 class IPDF_LayoutProcessor;
12 class IPDF_LayoutProvider;
13 typedef enum {
14     LayoutUnknown,
15     LayoutArifact,
16     LayoutDocument,
17     LayoutPart,
18     LayoutArt,
19     LayoutSect,
20     LayoutDiv,
21     LayoutBlockQuote,
22     LayoutCaption,
23     LayoutTOC,
24     LayoutTOCI,
25     LayoutIndex,
26     LayoutNonStruct,
27     LayoutPrivate,
28     LayoutParagraph,
29     LayoutHeading,
30     LayoutHeading1,
31     LayoutHeading2,
32     LayoutHeading3,
33     LayoutHeading4,
34     LayoutHeading5,
35     LayoutHeading6,
36     LayoutList,
37     LayoutListItem,
38     LayoutListLabel,
39     LayoutListBody,
40     LayoutTable,
41     LayoutTableRow,
42     LayoutTableHeaderCell,
43     LayoutTableDataCell,
44     LayoutTableHeaderGroup,
45     LayoutTableBodyGroup,
46     LayoutTableFootGroup,
47     LayoutSpan,
48     LayoutQuote,
49     LayoutNote,
50     LayoutReference,
51     LayoutBibEntry,
52     LayoutCode,
53     LayoutLink,
54     LayoutAnnot,
55     LayoutRuby,
56     LayoutRubyBase,
57     LayoutRubyAnnot,
58     LayoutRubyPunc,
59     LayoutWarichu,
60     LayoutWarichuText,
61     LayoutWarichuPunc,
62     LayoutFigure,
63     LayoutFormula,
64     LayoutForm,
65 } LayoutType;
66 typedef enum {
67     LayoutArtifactType,
68     LayoutArtifactAttached,
69     LayoutArtifactSubType,
70     LayoutPlacement,
71     LayoutWritingMode,
72     LayoutBackgroundColor,
73     LayoutBorderColor,
74     LayoutBorderStyle,
75     LayoutBorderThickness,
76     LayoutPadding,
77     LayoutColor,
78     LayoutSpaceBefore,
79     LayoutSpaceAfter,
80     LayoutStartIndent,
81     LayoutEndIndent,
82     LayoutTextIndent,
83     LayoutTextAlign,
84     LayoutBBox,
85     LayoutWidth,
86     LayoutHeight,
87     LayoutBlockAlign,
88     LayoutInlineAlign,
89     LayoutTBorderStyle,
90     LayoutTPadding,
91     LayoutBaselineShift,
92     LayoutLineHeight,
93     LayoutTextDecorationColor,
94     LayoutTextDecorationThickness,
95     LayoutTextDecorationType,
96     LayoutRubyAlign,
97     LayoutRubyPosition,
98     LayoutGlyphOrientationVertical,
99     LayoutColumnCount,
100     LayoutColumnGap,
101     LayoutColumnWidths,
102     LayoutListNumbering,
103     LayoutFieldRole,
104     LayoutFieldChecked,
105     LayoutFieldDesc,
106     LayoutRowSpan,
107     LayoutColSpan,
108     LayoutTableHeaders,
109     LayoutTableHeaderScope,
110     LayoutTableSummary,
111 } LayoutAttr;
112 typedef enum {
113     LayoutInvalid = 0,
114     LayoutBlock,
115     LayoutInline,
116     LayoutBefore,
117     LayoutAfter,
118     LayoutStart,
119     LayoutEnd,
120     LayoutLrTb,
121     LayoutRlTb,
122     LayoutTbRl,
123     LayoutNone,
124     LayoutHidden,
125     LayoutDotted,
126     LayoutDashed,
127     LayoutSolid,
128     LayoutDouble,
129     LayoutGroove,
130     LayoutRidge,
131     LayoutInset,
132     LayoutOutset,
133     LayoutNormal,
134     LayoutAuto,
135     LayoutCenter,
136     LayoutJustify,
137     LayoutMiddle,
138     LayoutUnderline,
139     LayoutOverline,
140     LayoutLineThrough,
141     LayoutDistribute,
142     LayoutMinus90Degree,
143     LayoutZeroDegree,
144     Layout90Degree,
145     Layout180Degree,
146     Layout270Degree,
147     LayoutDisc,
148     LayoutCircle,
149     LayoutSquare,
150     LayoutDecimal,
151     LayoutUpperRoman,
152     LayoutLowerRoman,
153     LayoutUpperAlpha,
154     LayoutLowerAlpha,
155     LayoutRB,
156     LayoutCB,
157     LayoutPB,
158     LayoutTV,
159     LayoutOn,
160     LayoutOff,
161     LayoutNeutral,
162     LayoutRow,
163     LayoutColumn,
164     LayoutBoth,
165     LayoutLeft,
166     LayoutTop,
167     LayoutBottom,
168     LayoutRight,
169     LayoutPagination,
170     LayoutLayout,
171     LayoutPage,
172     LayoutBackground,
173     LayoutHeader,
174     LayoutFooter,
175     LayoutWatermark,
176 } LayoutEnum;
177 class IPDF_LayoutElement
178 {
179 public:
180 
~IPDF_LayoutElement()181     virtual ~IPDF_LayoutElement() {};
182 
183 
184     virtual LayoutType	GetType() = 0;
185 
186     virtual int		CountAttrValues(LayoutAttr attr_type) = 0;
187 
188 
189     virtual LayoutEnum	GetEnumAttr(LayoutAttr attr_type, int index = 0) = 0;
190 
191     virtual FX_FLOAT	GetNumberAttr(LayoutAttr attr_type, int index = 0) = 0;
192 
193     virtual FX_COLORREF	GetColorAttr(LayoutAttr attr_type, int index = 0) = 0;
194 
195 
196     virtual int		CountChildren() = 0;
197 
198 
199     virtual IPDF_LayoutElement* GetChild(int index) = 0;
200 
201 
202     virtual IPDF_LayoutElement* GetParent() = 0;
203 
204 
205     virtual int		CountObjects() = 0;
206 
207     virtual CPDF_PageObject*	GetObject(int index) = 0;
208 };
209 typedef enum {
210     LayoutReady,
211     LayoutFinished,
212     LayoutToBeContinued,
213     LayoutError
214 } LayoutStatus;
215 #define RF_PARSER_IMAGE		0x1
216 #define RF_PARSER_DEBUGINFO	0x2
217 #define RF_PARSER_PAGEMODE	0x4
218 #define RF_PARSER_READERORDER	0x8
219 class IPDF_LayoutProcessor
220 {
221 public:
222 
~IPDF_LayoutProcessor()223     virtual ~IPDF_LayoutProcessor() {};
224 
225     static IPDF_LayoutProcessor* Create_LayoutProcessor_Reflow(FX_FLOAT TopIndent, FX_FLOAT fWidth, FX_FLOAT fHeight, void* pReflowedPage, int flags, FX_FLOAT lineSpace = 0);
226 
227     static IPDF_LayoutProcessor* Create_LayoutProcessor_2HTML(FX_LPCSTR fileName);
228 
229     virtual LayoutStatus	StartProcess(IPDF_LayoutElement* pElement, IFX_Pause* pPause, const CFX_AffineMatrix* pPDFMatrix = NULL) = 0;
230 
231     virtual LayoutStatus	Continue() = 0;
232     virtual int				GetPosition() = 0;
233 };
234 #define LP_Lang_Unknow	 		0x0
235 #define LP_Lang_English	 		0x1
236 #define LP_Lang_French			0x2
237 #define LP_Lang_Italian			0x4
238 #define LP_Lang_German			0x8
239 #define LP_Lang_Spanish			0x10
240 #define LP_Lang_Polish			0x20
241 #define LP_Lang_Russian			0x40
242 #define LP_Lang_ChinesePRC		0x80
243 #define LP_Lang_ChineseTaiwan	0x100
244 #define LP_Lang_Japanese		0x200
245 #define LP_Lang_Korean			0x400
246 #define LP_Lang_Portuguese		0x800
247 #define LP_Lang_Turkish			0x1000
248 #define LP_Lang_Dutch			0x2000
249 typedef struct _LayoutProviderStyle {
_LayoutProviderStyle_LayoutProviderStyle250     _LayoutProviderStyle()
251     {
252         m_Language = LP_Lang_Unknow;
253         m_bIgnoreInvisibleText = TRUE;
254     }
255     FX_INT32	m_Language;
256     FX_BOOL		m_bIgnoreInvisibleText;
257 } LAYOUTPROVIDER_STYLE;
258 class IPDF_LayoutProvider
259 {
260 public:
261 
~IPDF_LayoutProvider()262     virtual ~IPDF_LayoutProvider() {};
263 
264     static IPDF_LayoutProvider* Create_LayoutProvider_TaggedPDF(CPDF_PageObjects* pPageObjs);
265 
266     static IPDF_LayoutProvider* Create_LayoutProvider_AutoReflow(CPDF_PageObjects* pPageObjs, FX_BOOL bReadOrder);
267 
268     virtual void			SetLayoutProviderStyle(LAYOUTPROVIDER_STYLE Style) = 0;
269 
270 
271 
272 
273     virtual LayoutStatus	StartLoad(IFX_Pause* pPause = NULL) = 0;
274 
275     virtual LayoutStatus	Continue() = 0;
276     virtual int				GetPosition() = 0;
277 
278 
279     virtual IPDF_LayoutElement* GetRoot() = 0;
280 };
281 #endif  // CORE_INCLUDE_REFLOW_FPDF_LAYOUT_H_
282