From 5110c4743751145c4ae1934cd1d83bc6c55bb43f Mon Sep 17 00:00:00 2001 From: John Abd-El-Malek Date: Sat, 17 May 2014 22:33:34 -0700 Subject: Initial commit. --- core/include/reflow/fpdf_layout.h | 280 +++++++++++++++++++++++++++++++++++++ core/include/reflow/reflowengine.h | 76 ++++++++++ 2 files changed, 356 insertions(+) create mode 100644 core/include/reflow/fpdf_layout.h create mode 100644 core/include/reflow/reflowengine.h (limited to 'core/include/reflow') diff --git a/core/include/reflow/fpdf_layout.h b/core/include/reflow/fpdf_layout.h new file mode 100644 index 0000000000..fc01ba30c8 --- /dev/null +++ b/core/include/reflow/fpdf_layout.h @@ -0,0 +1,280 @@ +// Copyright 2014 PDFium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com + +#ifndef _FPDFAPI_LAYOUT_H_ +#define _FPDFAPI_LAYOUT_H_ +class IPDF_LayoutElement; +class IPDF_LayoutProcessor; +class IPDF_LayoutProvider; +typedef enum { + LayoutUnknown, + LayoutArifact, + LayoutDocument, + LayoutPart, + LayoutArt, + LayoutSect, + LayoutDiv, + LayoutBlockQuote, + LayoutCaption, + LayoutTOC, + LayoutTOCI, + LayoutIndex, + LayoutNonStruct, + LayoutPrivate, + LayoutParagraph, + LayoutHeading, + LayoutHeading1, + LayoutHeading2, + LayoutHeading3, + LayoutHeading4, + LayoutHeading5, + LayoutHeading6, + LayoutList, + LayoutListItem, + LayoutListLabel, + LayoutListBody, + LayoutTable, + LayoutTableRow, + LayoutTableHeaderCell, + LayoutTableDataCell, + LayoutTableHeaderGroup, + LayoutTableBodyGroup, + LayoutTableFootGroup, + LayoutSpan, + LayoutQuote, + LayoutNote, + LayoutReference, + LayoutBibEntry, + LayoutCode, + LayoutLink, + LayoutAnnot, + LayoutRuby, + LayoutRubyBase, + LayoutRubyAnnot, + LayoutRubyPunc, + LayoutWarichu, + LayoutWarichuText, + LayoutWarichuPunc, + LayoutFigure, + LayoutFormula, + LayoutForm, +} LayoutType; +typedef enum { + LayoutArtifactType, + LayoutArtifactAttached, + LayoutArtifactSubType, + LayoutPlacement, + LayoutWritingMode, + LayoutBackgroundColor, + LayoutBorderColor, + LayoutBorderStyle, + LayoutBorderThickness, + LayoutPadding, + LayoutColor, + LayoutSpaceBefore, + LayoutSpaceAfter, + LayoutStartIndent, + LayoutEndIndent, + LayoutTextIndent, + LayoutTextAlign, + LayoutBBox, + LayoutWidth, + LayoutHeight, + LayoutBlockAlign, + LayoutInlineAlign, + LayoutTBorderStyle, + LayoutTPadding, + LayoutBaselineShift, + LayoutLineHeight, + LayoutTextDecorationColor, + LayoutTextDecorationThickness, + LayoutTextDecorationType, + LayoutRubyAlign, + LayoutRubyPosition, + LayoutGlyphOrientationVertical, + LayoutColumnCount, + LayoutColumnGap, + LayoutColumnWidths, + LayoutListNumbering, + LayoutFieldRole, + LayoutFieldChecked, + LayoutFieldDesc, + LayoutRowSpan, + LayoutColSpan, + LayoutTableHeaders, + LayoutTableHeaderScope, + LayoutTableSummary, +} LayoutAttr; +typedef enum { + LayoutInvalid = 0, + LayoutBlock, + LayoutInline, + LayoutBefore, + LayoutAfter, + LayoutStart, + LayoutEnd, + LayoutLrTb, + LayoutRlTb, + LayoutTbRl, + LayoutNone, + LayoutHidden, + LayoutDotted, + LayoutDashed, + LayoutSolid, + LayoutDouble, + LayoutGroove, + LayoutRidge, + LayoutInset, + LayoutOutset, + LayoutNormal, + LayoutAuto, + LayoutCenter, + LayoutJustify, + LayoutMiddle, + LayoutUnderline, + LayoutOverline, + LayoutLineThrough, + LayoutDistribute, + LayoutMinus90Degree, + LayoutZeroDegree, + Layout90Degree, + Layout180Degree, + Layout270Degree, + LayoutDisc, + LayoutCircle, + LayoutSquare, + LayoutDecimal, + LayoutUpperRoman, + LayoutLowerRoman, + LayoutUpperAlpha, + LayoutLowerAlpha, + LayoutRB, + LayoutCB, + LayoutPB, + LayoutTV, + LayoutOn, + LayoutOff, + LayoutNeutral, + LayoutRow, + LayoutColumn, + LayoutBoth, + LayoutLeft, + LayoutTop, + LayoutBottom, + LayoutRight, + LayoutPagination, + LayoutLayout, + LayoutPage, + LayoutBackground, + LayoutHeader, + LayoutFooter, + LayoutWatermark, +} LayoutEnum; +class IPDF_LayoutElement +{ +public: + + virtual ~IPDF_LayoutElement() {}; + + + virtual LayoutType GetType() = 0; + + virtual int CountAttrValues(LayoutAttr attr_type) = 0; + + + virtual LayoutEnum GetEnumAttr(LayoutAttr attr_type, int index = 0) = 0; + + virtual FX_FLOAT GetNumberAttr(LayoutAttr attr_type, int index = 0) = 0; + + virtual FX_COLORREF GetColorAttr(LayoutAttr attr_type, int index = 0) = 0; + + + virtual int CountChildren() = 0; + + + virtual IPDF_LayoutElement* GetChild(int index) = 0; + + + virtual IPDF_LayoutElement* GetParent() = 0; + + + virtual int CountObjects() = 0; + + virtual CPDF_PageObject* GetObject(int index) = 0; +}; +typedef enum { + LayoutReady, + LayoutFinished, + LayoutToBeContinued, + LayoutError +} LayoutStatus; +#define RF_PARSER_IMAGE 0x1 +#define RF_PARSER_DEBUGINFO 0x2 +#define RF_PARSER_PAGEMODE 0x4 +#define RF_PARSER_READERORDER 0x8 +class IPDF_LayoutProcessor +{ +public: + + virtual ~IPDF_LayoutProcessor() {}; + + static IPDF_LayoutProcessor* Create_LayoutProcessor_Reflow(FX_FLOAT TopIndent, FX_FLOAT fWidth, FX_FLOAT fHeight, void* pReflowedPage, int flags, FX_FLOAT lineSpace = 0); + + static IPDF_LayoutProcessor* Create_LayoutProcessor_2HTML(FX_LPCSTR fileName); + + virtual LayoutStatus StartProcess(IPDF_LayoutElement* pElement, IFX_Pause* pPause, const CFX_AffineMatrix* pPDFMatrix = NULL) = 0; + + virtual LayoutStatus Continue() = 0; + virtual int GetPosition() = 0; +}; +#define LP_Lang_Unknow 0x0 +#define LP_Lang_English 0x1 +#define LP_Lang_French 0x2 +#define LP_Lang_Italian 0x4 +#define LP_Lang_German 0x8 +#define LP_Lang_Spanish 0x10 +#define LP_Lang_Polish 0x20 +#define LP_Lang_Russian 0x40 +#define LP_Lang_ChinesePRC 0x80 +#define LP_Lang_ChineseTaiwan 0x100 +#define LP_Lang_Japanese 0x200 +#define LP_Lang_Korean 0x400 +#define LP_Lang_Portuguese 0x800 +#define LP_Lang_Turkish 0x1000 +#define LP_Lang_Dutch 0x2000 +typedef struct _LayoutProviderStyle { + _LayoutProviderStyle() + { + m_Language = LP_Lang_Unknow; + m_bIgnoreInvisibleText = TRUE; + } + FX_INT32 m_Language; + FX_BOOL m_bIgnoreInvisibleText; +} LAYOUTPROVIDER_STYLE; +class IPDF_LayoutProvider +{ +public: + + virtual ~IPDF_LayoutProvider() {}; + + static IPDF_LayoutProvider* Create_LayoutProvider_TaggedPDF(CPDF_PageObjects* pPageObjs); + + static IPDF_LayoutProvider* Create_LayoutProvider_AutoReflow(CPDF_PageObjects* pPageObjs, FX_BOOL bReadOrder); + + virtual void SetLayoutProviderStyle(LAYOUTPROVIDER_STYLE Style) = 0; + + + + + virtual LayoutStatus StartLoad(IFX_Pause* pPause = NULL) = 0; + + virtual LayoutStatus Continue() = 0; + virtual int GetPosition() = 0; + + + virtual IPDF_LayoutElement* GetRoot() = 0; +}; +#endif diff --git a/core/include/reflow/reflowengine.h b/core/include/reflow/reflowengine.h new file mode 100644 index 0000000000..e6a5265db3 --- /dev/null +++ b/core/include/reflow/reflowengine.h @@ -0,0 +1,76 @@ +// Copyright 2014 PDFium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com + +#ifndef _REFLOW_ENGINE_H +#define _REFLOW_ENGINE_H +#include "../fpdfapi/fpdf_render.h" +#include "../fpdftext/fpdf_text.h" +#include "fpdf_layout.h" +#include "../fpdfapi/fpdf_pageobj.h" +#include "../fpdfdoc/fpdf_tagged.h" +class IPDF_ReflowedPage +{ +public: + static IPDF_ReflowedPage* Create(); + + virtual ~IPDF_ReflowedPage() {} + virtual CFX_PrivateData* GetPrivateDataCtrl() = 0; + + + virtual void GetDisplayMatrix(CFX_AffineMatrix& matrix, FX_INT32 xPos, FX_INT32 yPos, FX_INT32 xSize, FX_INT32 ySize, FX_INT32 iRotate, const CFX_AffineMatrix* pPageMatrix) = 0; + virtual FX_FLOAT GetPageHeight() = 0; + virtual FX_FLOAT GetPageWidth() = 0; + virtual void FocusGetData(const CFX_AffineMatrix matrix, FX_INT32 x, FX_INT32 y, CFX_ByteString& str) = 0; + virtual FX_BOOL FocusGetPosition(const CFX_AffineMatrix matrix, CFX_ByteString str, FX_INT32& x, FX_INT32& y) = 0; +}; +typedef struct _RF_ParseStyle { + _RF_ParseStyle() + { + m_LineSpace = 0; + }; + FX_FLOAT m_LineSpace; +} RF_ParseStyle; +class IPDF_ProgressiveReflowPageParser +{ +public: + static IPDF_ProgressiveReflowPageParser* Create(); + static FX_BOOL IsTaggedPage(CPDF_PageObjects*pPage); + + virtual ~IPDF_ProgressiveReflowPageParser() {} + typedef enum { Ready, ToBeContinued, Done, Failed } ParseStatus; + + virtual ParseStatus GetStatus() = 0; + virtual void SetParserStyle(RF_ParseStyle style) = 0; + virtual void Start(IPDF_ReflowedPage* pReflowPage, CPDF_Page* pPage, FX_FLOAT TopIndent, FX_FLOAT fWidth, FX_FLOAT fHeight, IFX_Pause* pPause, int flags) = 0; + virtual void Continue(IFX_Pause* pPause) = 0; + + virtual int GetPosition() = 0; + + + virtual void Clear() = 0; +}; +class IPDF_ProgressiveReflowPageRender +{ +public: + static IPDF_ProgressiveReflowPageRender* Create(); + + virtual ~IPDF_ProgressiveReflowPageRender() {} + typedef enum { Ready, ToBeContinued, Waiting, Done, Failed } RenderStatus; + + virtual RenderStatus GetStatus() = 0; + + + virtual void Start(IPDF_ReflowedPage* pReflowPage, CFX_RenderDevice* pDevice, const CFX_AffineMatrix* pMatrix, IFX_Pause* pPause, int DitherBits ) = 0; + virtual void Continue(IFX_Pause* pPause) = 0; + virtual int GetPosition() = 0; + + + virtual void Clear() = 0; +}; +IPDF_ReflowedPage* Create_ReflowPage(); +IPDF_ProgressiveReflowPageParser* Create_ReflowPageParser(); +IPDF_ProgressiveReflowPageRender* Create_ReflowPageRender(); +#endif -- cgit v1.2.3