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