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