csection.h revision 33357cad1fd1321a2b38d2963e2585f27ce980a2
1// Copyright 2016 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_FPDFDOC_CSECTION_H_
8#define CORE_FPDFDOC_CSECTION_H_
9
10#include "core/fpdfdoc/clines.h"
11#include "core/fpdfdoc/cpvt_sectioninfo.h"
12#include "core/fpdfdoc/ctypeset.h"
13#include "core/fxcrt/fx_coordinates.h"
14#include "core/fxcrt/fx_system.h"
15
16class CPDF_VariableText;
17class CPVT_LineInfo;
18struct CPVT_WordLine;
19struct CPVT_WordPlace;
20
21class CSection final {
22 public:
23  explicit CSection(CPDF_VariableText* pVT);
24  ~CSection();
25
26  void ResetAll();
27  void ResetLineArray();
28  void ResetWordArray();
29  void ResetLinePlace();
30  CPVT_WordPlace AddWord(const CPVT_WordPlace& place,
31                         const CPVT_WordInfo& wordinfo);
32  CPVT_WordPlace AddLine(const CPVT_LineInfo& lineinfo);
33  void ClearWords(const CPVT_WordRange& PlaceRange);
34  void ClearWord(const CPVT_WordPlace& place);
35  CPVT_FloatRect Rearrange();
36  CFX_SizeF GetSectionSize(FX_FLOAT fFontSize);
37  CPVT_WordPlace GetBeginWordPlace() const;
38  CPVT_WordPlace GetEndWordPlace() const;
39  CPVT_WordPlace GetPrevWordPlace(const CPVT_WordPlace& place) const;
40  CPVT_WordPlace GetNextWordPlace(const CPVT_WordPlace& place) const;
41  void UpdateWordPlace(CPVT_WordPlace& place) const;
42  CPVT_WordPlace SearchWordPlace(const CFX_PointF& point) const;
43  CPVT_WordPlace SearchWordPlace(FX_FLOAT fx,
44                                 const CPVT_WordPlace& lineplace) const;
45  CPVT_WordPlace SearchWordPlace(FX_FLOAT fx,
46                                 const CPVT_WordRange& range) const;
47
48  CPVT_WordPlace SecPlace;
49  CPVT_SectionInfo m_SecInfo;
50  CLines m_LineArray;
51  CPVT_ArrayTemplate<CPVT_WordInfo*> m_WordArray;
52
53 private:
54  friend class CTypeset;
55
56  void ClearLeftWords(int32_t nWordIndex);
57  void ClearRightWords(int32_t nWordIndex);
58  void ClearMidWords(int32_t nBeginIndex, int32_t nEndIndex);
59
60  CPDF_VariableText* const m_pVT;
61};
62
63#endif  // CORE_FPDFDOC_CSECTION_H_
64