fc01ba30c88ad6f0a14f9fac911ae35ea48fee97
[pdfium.git] / core / include / reflow / fpdf_layout.h
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_
9 class IPDF_LayoutElement;
10 class IPDF_LayoutProcessor;
11 class IPDF_LayoutProvider;
12 typedef 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;
65 typedef 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;
111 typedef 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;
176 class IPDF_LayoutElement
177 {
178 public:
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 };
208 typedef 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
218 class IPDF_LayoutProcessor
219 {
220 public:
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
248 typedef 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;
257 class IPDF_LayoutProvider
258 {
259 public:
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