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_SRC_FPDFTEXT_TXTPROC_H_
8#define CORE_SRC_FPDFTEXT_TXTPROC_H_
9
10class CTextColumn
11{
12public:
13    FX_FLOAT	m_AvgPos;
14    int		m_Count;
15    int		m_TextPos;
16};
17class CTextBox
18{
19public:
20    CFX_WideString	m_Text;
21    FX_FLOAT	m_Left;
22    FX_FLOAT	m_Right;
23    FX_FLOAT	m_SpaceWidth;
24    FX_FLOAT	m_Top;
25    FX_FLOAT	m_Bottom;
26    FX_FLOAT	m_FontSizeV;
27    CTextColumn* m_pColumn;
28};
29class CTextBaseLine
30{
31public:
32    CTextBaseLine();
33    ~CTextBaseLine();
34    void	InsertTextBox(FX_FLOAT leftx, FX_FLOAT rightx, FX_FLOAT topy, FX_FLOAT bottomy,
35                          FX_FLOAT spacew, FX_FLOAT fontsize_v, const CFX_WideString& str);
36    FX_BOOL	GetWidth(FX_FLOAT& leftx, FX_FLOAT& rightx);
37    FX_BOOL	CanMerge(CTextBaseLine* pOther);
38    void	Merge(CTextBaseLine* pOther);
39    void	MergeBoxes();
40    void	CountChars(int& count, FX_FLOAT& width, int& minchars);
41    void	WriteOutput(CFX_WideString& str, FX_FLOAT leftx, FX_FLOAT width, int iWidth);
42    FX_FLOAT	m_BaseLine;
43    FX_FLOAT	m_Top;
44    FX_FLOAT	m_Bottom;
45    FX_FLOAT	m_MaxFontSizeV;
46    CFX_PtrArray		m_TextList;
47};
48class CPDF_PageObject;
49class CPDF_TextObject;
50class CTextPage
51{
52public:
53    CTextPage();
54    ~CTextPage();
55    void	ProcessObject(CPDF_PageObject* pObj);
56    CTextBaseLine* InsertTextBox(CTextBaseLine* pBaseLine, FX_FLOAT basey, FX_FLOAT leftx,
57                                 FX_FLOAT rightx, FX_FLOAT topy, FX_FLOAT bottomy, FX_FLOAT spacew, FX_FLOAT fontsize_v,
58                                 CFX_ByteString& str, CPDF_Font* pFont);
59    void	WriteOutput(CFX_WideStringArray& lines, int iMinWidth);
60    FX_BOOL	m_bAutoWidth;
61    FX_BOOL	m_bKeepColumn;
62    FX_BOOL	m_bBreakSpace;
63    FX_BOOL	m_bOCR;
64private:
65    CFX_PtrArray	m_BaseLines;
66    CFX_PtrArray	m_TextColumns;
67    void	FindColumns();
68    CTextColumn*	FindColumn(FX_FLOAT xpos);
69    void	BreakSpace(CPDF_TextObject* pTextObj);
70};
71
72#endif  // CORE_SRC_FPDFTEXT_TXTPROC_H_
73