// 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 CORE_SRC_FPDFTEXT_TXTPROC_H_ #define CORE_SRC_FPDFTEXT_TXTPROC_H_ class CTextColumn { public: FX_FLOAT m_AvgPos; int m_Count; int m_TextPos; }; class CTextBox { public: CFX_WideString m_Text; FX_FLOAT m_Left; FX_FLOAT m_Right; FX_FLOAT m_SpaceWidth; FX_FLOAT m_Top; FX_FLOAT m_Bottom; FX_FLOAT m_FontSizeV; CTextColumn* m_pColumn; }; class CTextBaseLine { public: CTextBaseLine(); ~CTextBaseLine(); void InsertTextBox(FX_FLOAT leftx, FX_FLOAT rightx, FX_FLOAT topy, FX_FLOAT bottomy, FX_FLOAT spacew, FX_FLOAT fontsize_v, const CFX_WideString& str); FX_BOOL GetWidth(FX_FLOAT& leftx, FX_FLOAT& rightx); FX_BOOL CanMerge(CTextBaseLine* pOther); void Merge(CTextBaseLine* pOther); void MergeBoxes(); void CountChars(int& count, FX_FLOAT& width, int& minchars); void WriteOutput(CFX_WideString& str, FX_FLOAT leftx, FX_FLOAT width, int iWidth); FX_FLOAT m_BaseLine; FX_FLOAT m_Top; FX_FLOAT m_Bottom; FX_FLOAT m_MaxFontSizeV; CFX_PtrArray m_TextList; }; class CPDF_PageObject; class CPDF_TextObject; class CTextPage { public: CTextPage(); ~CTextPage(); void ProcessObject(CPDF_PageObject* pObj); CTextBaseLine* InsertTextBox(CTextBaseLine* pBaseLine, FX_FLOAT basey, FX_FLOAT leftx, FX_FLOAT rightx, FX_FLOAT topy, FX_FLOAT bottomy, FX_FLOAT spacew, FX_FLOAT fontsize_v, CFX_ByteString& str, CPDF_Font* pFont); void WriteOutput(CFX_WideStringArray& lines, int iMinWidth); FX_BOOL m_bAutoWidth; FX_BOOL m_bKeepColumn; FX_BOOL m_bBreakSpace; private: CFX_PtrArray m_BaseLines; CFX_PtrArray m_TextColumns; void FindColumns(); CTextColumn* FindColumn(FX_FLOAT xpos); void BreakSpace(CPDF_TextObject* pTextObj); }; #endif // CORE_SRC_FPDFTEXT_TXTPROC_H_