xref: /aosp_15_r20/external/pdfium/xfa/fgas/layout/cfgas_rtfbreak.h (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
1*3ac0a46fSAndroid Build Coastguard Worker // Copyright 2014 The PDFium Authors
2*3ac0a46fSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*3ac0a46fSAndroid Build Coastguard Worker // found in the LICENSE file.
4*3ac0a46fSAndroid Build Coastguard Worker 
5*3ac0a46fSAndroid Build Coastguard Worker // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6*3ac0a46fSAndroid Build Coastguard Worker 
7*3ac0a46fSAndroid Build Coastguard Worker #ifndef XFA_FGAS_LAYOUT_CFGAS_RTFBREAK_H_
8*3ac0a46fSAndroid Build Coastguard Worker #define XFA_FGAS_LAYOUT_CFGAS_RTFBREAK_H_
9*3ac0a46fSAndroid Build Coastguard Worker 
10*3ac0a46fSAndroid Build Coastguard Worker #include <deque>
11*3ac0a46fSAndroid Build Coastguard Worker #include <vector>
12*3ac0a46fSAndroid Build Coastguard Worker 
13*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/fx_coordinates.h"
14*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/fx_unicode.h"
15*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/retain_ptr.h"
16*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fgas/layout/cfgas_break.h"
17*3ac0a46fSAndroid Build Coastguard Worker 
18*3ac0a46fSAndroid Build Coastguard Worker class CFGAS_TextPiece;
19*3ac0a46fSAndroid Build Coastguard Worker class CFGAS_TextUserData;
20*3ac0a46fSAndroid Build Coastguard Worker class TextCharPos;
21*3ac0a46fSAndroid Build Coastguard Worker 
22*3ac0a46fSAndroid Build Coastguard Worker class CFGAS_RTFBreak final : public CFGAS_Break {
23*3ac0a46fSAndroid Build Coastguard Worker  public:
24*3ac0a46fSAndroid Build Coastguard Worker   enum class LineAlignment : uint8_t {
25*3ac0a46fSAndroid Build Coastguard Worker     Left = 0,
26*3ac0a46fSAndroid Build Coastguard Worker     Center,
27*3ac0a46fSAndroid Build Coastguard Worker     Right,
28*3ac0a46fSAndroid Build Coastguard Worker     Justified,
29*3ac0a46fSAndroid Build Coastguard Worker     Distributed
30*3ac0a46fSAndroid Build Coastguard Worker   };
31*3ac0a46fSAndroid Build Coastguard Worker 
32*3ac0a46fSAndroid Build Coastguard Worker   explicit CFGAS_RTFBreak(Mask<LayoutStyle> dwLayoutStyles);
33*3ac0a46fSAndroid Build Coastguard Worker   ~CFGAS_RTFBreak() override;
34*3ac0a46fSAndroid Build Coastguard Worker 
35*3ac0a46fSAndroid Build Coastguard Worker   void SetLineStartPos(float fLinePos);
36*3ac0a46fSAndroid Build Coastguard Worker 
SetAlignment(LineAlignment align)37*3ac0a46fSAndroid Build Coastguard Worker   void SetAlignment(LineAlignment align) { m_iAlignment = align; }
38*3ac0a46fSAndroid Build Coastguard Worker   void SetUserData(const RetainPtr<CFGAS_TextUserData>& pUserData);
39*3ac0a46fSAndroid Build Coastguard Worker 
40*3ac0a46fSAndroid Build Coastguard Worker   void AddPositionedTab(float fTabPos);
41*3ac0a46fSAndroid Build Coastguard Worker 
42*3ac0a46fSAndroid Build Coastguard Worker   CFGAS_Char::BreakType EndBreak(CFGAS_Char::BreakType dwStatus);
43*3ac0a46fSAndroid Build Coastguard Worker 
44*3ac0a46fSAndroid Build Coastguard Worker   size_t GetDisplayPos(const CFGAS_TextPiece* pPiece,
45*3ac0a46fSAndroid Build Coastguard Worker                        std::vector<TextCharPos>* pCharPos) const;
46*3ac0a46fSAndroid Build Coastguard Worker 
47*3ac0a46fSAndroid Build Coastguard Worker   CFGAS_Char::BreakType AppendChar(wchar_t wch);
48*3ac0a46fSAndroid Build Coastguard Worker 
49*3ac0a46fSAndroid Build Coastguard Worker  private:
50*3ac0a46fSAndroid Build Coastguard Worker   void AppendChar_Combination(CFGAS_Char* pCurChar);
51*3ac0a46fSAndroid Build Coastguard Worker   void AppendChar_Tab(CFGAS_Char* pCurChar);
52*3ac0a46fSAndroid Build Coastguard Worker   CFGAS_Char::BreakType AppendChar_Control(CFGAS_Char* pCurChar);
53*3ac0a46fSAndroid Build Coastguard Worker   CFGAS_Char::BreakType AppendChar_Arabic(CFGAS_Char* pCurChar);
54*3ac0a46fSAndroid Build Coastguard Worker   CFGAS_Char::BreakType AppendChar_Others(CFGAS_Char* pCurChar);
55*3ac0a46fSAndroid Build Coastguard Worker   bool GetPositionedTab(int32_t* iTabPos) const;
56*3ac0a46fSAndroid Build Coastguard Worker 
57*3ac0a46fSAndroid Build Coastguard Worker   int32_t GetBreakPos(std::vector<CFGAS_Char>& tca,
58*3ac0a46fSAndroid Build Coastguard Worker                       bool bAllChars,
59*3ac0a46fSAndroid Build Coastguard Worker                       bool bOnlyBrk,
60*3ac0a46fSAndroid Build Coastguard Worker                       int32_t* pEndPos);
61*3ac0a46fSAndroid Build Coastguard Worker   void SplitTextLine(CFGAS_BreakLine* pCurLine,
62*3ac0a46fSAndroid Build Coastguard Worker                      CFGAS_BreakLine* pNextLine,
63*3ac0a46fSAndroid Build Coastguard Worker                      bool bAllChars);
64*3ac0a46fSAndroid Build Coastguard Worker   bool EndBreakSplitLine(CFGAS_BreakLine* pNextLine,
65*3ac0a46fSAndroid Build Coastguard Worker                          bool bAllChars,
66*3ac0a46fSAndroid Build Coastguard Worker                          CFGAS_Char::BreakType dwStatus);
67*3ac0a46fSAndroid Build Coastguard Worker   std::deque<TPO> EndBreakBidiLine(CFGAS_Char::BreakType dwStatus);
68*3ac0a46fSAndroid Build Coastguard Worker   void EndBreakAlignment(const std::deque<TPO>& tpos,
69*3ac0a46fSAndroid Build Coastguard Worker                          bool bAllChars,
70*3ac0a46fSAndroid Build Coastguard Worker                          CFGAS_Char::BreakType dwStatus);
71*3ac0a46fSAndroid Build Coastguard Worker 
72*3ac0a46fSAndroid Build Coastguard Worker   bool m_bPagination = false;
73*3ac0a46fSAndroid Build Coastguard Worker   LineAlignment m_iAlignment = LineAlignment::Left;
74*3ac0a46fSAndroid Build Coastguard Worker   std::vector<int32_t> m_PositionedTabs;
75*3ac0a46fSAndroid Build Coastguard Worker   RetainPtr<CFGAS_TextUserData> m_pUserData;
76*3ac0a46fSAndroid Build Coastguard Worker };
77*3ac0a46fSAndroid Build Coastguard Worker 
78*3ac0a46fSAndroid Build Coastguard Worker #endif  // XFA_FGAS_LAYOUT_CFGAS_RTFBREAK_H_
79