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