Home | History | Annotate | Download | only in reflow
      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 
    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 
    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 {
    250     _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 
    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