Index: xfa/fgas/layout/fgas_textbreak.cpp |
diff --git a/xfa/fgas/layout/fgas_textbreak.cpp b/xfa/fgas/layout/fgas_textbreak.cpp |
index d33d02c6f2b2043ed6b9f47fb0083e4faf20184b..0face90abd9cd047d9b6b10648c2bc68461872e2 100644 |
--- a/xfa/fgas/layout/fgas_textbreak.cpp |
+++ b/xfa/fgas/layout/fgas_textbreak.cpp |
@@ -8,177 +8,12 @@ |
#include <algorithm> |
+#include "core/fxcrt/include/fx_arabic.h" |
#include "core/fxcrt/include/fx_arb.h" |
#include "core/fxcrt/include/fx_memory.h" |
#include "xfa/fgas/layout/fgas_linebreak.h" |
#include "xfa/fgas/layout/fgas_unicode.h" |
-namespace { |
- |
-class CFX_TxtLine { |
- public: |
- CFX_TxtLine(int32_t iBlockSize) |
- : m_iStart(0), m_iWidth(0), m_iArabicChars(0) { |
- m_pLineChars = new CFX_TxtCharArray; |
- m_pLinePieces = new CFX_TxtPieceArray(16); |
- } |
- ~CFX_TxtLine() { |
- RemoveAll(); |
- delete m_pLineChars; |
- delete m_pLinePieces; |
- } |
- int32_t CountChars() const { return m_pLineChars->GetSize(); } |
- CFX_TxtChar* GetCharPtr(int32_t index) const { |
- FXSYS_assert(index > -1 && index < m_pLineChars->GetSize()); |
- return m_pLineChars->GetDataPtr(index); |
- } |
- int32_t CountPieces() const { return m_pLinePieces->GetSize(); } |
- CFX_TxtPiece* GetPiecePtr(int32_t index) const { |
- FXSYS_assert(index > -1 && index < m_pLinePieces->GetSize()); |
- return m_pLinePieces->GetPtrAt(index); |
- } |
- void GetString(CFX_WideString& wsStr) const { |
- int32_t iCount = m_pLineChars->GetSize(); |
- FX_WCHAR* pBuf = wsStr.GetBuffer(iCount); |
- CFX_Char* pChar; |
- for (int32_t i = 0; i < iCount; i++) { |
- pChar = m_pLineChars->GetDataPtr(i); |
- *pBuf++ = (FX_WCHAR)pChar->m_wCharCode; |
- } |
- wsStr.ReleaseBuffer(iCount); |
- } |
- void RemoveAll(FX_BOOL bLeaveMemory = FALSE) { |
- m_pLineChars->RemoveAll(); |
- m_pLinePieces->RemoveAll(bLeaveMemory); |
- m_iWidth = 0; |
- m_iArabicChars = 0; |
- } |
- CFX_TxtCharArray* m_pLineChars; |
- CFX_TxtPieceArray* m_pLinePieces; |
- int32_t m_iStart; |
- int32_t m_iWidth; |
- int32_t m_iArabicChars; |
-}; |
- |
-class CFX_TxtBreak : public IFX_TxtBreak { |
- public: |
- CFX_TxtBreak(uint32_t dwPolicies); |
- ~CFX_TxtBreak(); |
- virtual void Release() { delete this; } |
- virtual void SetLineWidth(FX_FLOAT fLineWidth); |
- virtual void SetLinePos(FX_FLOAT fLinePos); |
- virtual uint32_t GetLayoutStyles() const { return m_dwLayoutStyles; } |
- virtual void SetLayoutStyles(uint32_t dwLayoutStyles); |
- virtual void SetFont(IFX_Font* pFont); |
- virtual void SetFontSize(FX_FLOAT fFontSize); |
- virtual void SetTabWidth(FX_FLOAT fTabWidth, FX_BOOL bEquidistant); |
- virtual void SetDefaultChar(FX_WCHAR wch); |
- virtual void SetParagraphBreakChar(FX_WCHAR wch); |
- virtual void SetLineBreakTolerance(FX_FLOAT fTolerance); |
- virtual void SetHorizontalScale(int32_t iScale); |
- virtual void SetVerticalScale(int32_t iScale); |
- virtual void SetCharRotation(int32_t iCharRotation); |
- virtual void SetCharSpace(FX_FLOAT fCharSpace); |
- virtual void SetAlignment(int32_t iAlignment); |
- virtual uint32_t GetContextCharStyles() const; |
- virtual void SetContextCharStyles(uint32_t dwCharStyles); |
- virtual void SetCombWidth(FX_FLOAT fCombWidth); |
- virtual void SetUserData(void* pUserData); |
- virtual uint32_t AppendChar(FX_WCHAR wch); |
- virtual uint32_t EndBreak(uint32_t dwStatus = FX_TXTBREAK_PieceBreak); |
- virtual int32_t CountBreakChars() const; |
- virtual int32_t CountBreakPieces() const; |
- virtual const CFX_TxtPiece* GetBreakPiece(int32_t index) const; |
- virtual void ClearBreakPieces(); |
- virtual void Reset(); |
- virtual int32_t GetDisplayPos( |
- const FX_TXTRUN* pTxtRun, |
- FXTEXT_CHARPOS* pCharPos, |
- FX_BOOL bCharCode = FALSE, |
- CFX_WideString* pWSForms = NULL, |
- FX_AdjustCharDisplayPos pAdjustPos = NULL) const; |
- virtual int32_t GetCharRects(const FX_TXTRUN* pTxtRun, |
- CFX_RectFArray& rtArray, |
- FX_BOOL bCharBBox = FALSE) const; |
- void AppendChar_PageLoad(CFX_Char* pCurChar, uint32_t dwProps); |
- uint32_t AppendChar_Combination(CFX_Char* pCurChar, int32_t iRotation); |
- uint32_t AppendChar_Tab(CFX_Char* pCurChar, int32_t iRotation); |
- uint32_t AppendChar_Control(CFX_Char* pCurChar, int32_t iRotation); |
- uint32_t AppendChar_Arabic(CFX_Char* pCurChar, int32_t iRotation); |
- uint32_t AppendChar_Others(CFX_Char* pCurChar, int32_t iRotation); |
- |
- protected: |
- uint32_t m_dwPolicies; |
- FX_BOOL m_bPagination; |
- IFX_ArabicChar* m_pArabicChar; |
- int32_t m_iLineWidth; |
- uint32_t m_dwLayoutStyles; |
- FX_BOOL m_bVertical; |
- FX_BOOL m_bArabicContext; |
- FX_BOOL m_bArabicShapes; |
- FX_BOOL m_bRTL; |
- FX_BOOL m_bSingleLine; |
- FX_BOOL m_bCombText; |
- int32_t m_iArabicContext; |
- int32_t m_iCurArabicContext; |
- IFX_Font* m_pFont; |
- int32_t m_iFontSize; |
- FX_BOOL m_bEquidistant; |
- int32_t m_iTabWidth; |
- FX_WCHAR m_wDefChar; |
- FX_WCHAR m_wParagBreakChar; |
- int32_t m_iDefChar; |
- int32_t m_iLineRotation; |
- int32_t m_iCharRotation; |
- int32_t m_iRotation; |
- int32_t m_iAlignment; |
- uint32_t m_dwContextCharStyles; |
- int32_t m_iCombWidth; |
- void* m_pUserData; |
- uint32_t m_dwCharType; |
- FX_BOOL m_bCurRTL; |
- int32_t m_iCurAlignment; |
- FX_BOOL m_bArabicNumber; |
- FX_BOOL m_bArabicComma; |
- CFX_TxtLine* m_pTxtLine1; |
- CFX_TxtLine* m_pTxtLine2; |
- CFX_TxtLine* m_pCurLine; |
- int32_t m_iReady; |
- int32_t m_iTolerance; |
- int32_t m_iHorScale; |
- int32_t m_iVerScale; |
- int32_t m_iCharSpace; |
- void SetBreakStatus(); |
- int32_t GetLineRotation(uint32_t dwStyles) const; |
- CFX_TxtChar* GetLastChar(int32_t index, FX_BOOL bOmitChar = TRUE) const; |
- CFX_TxtLine* GetTxtLine(FX_BOOL bReady) const; |
- CFX_TxtPieceArray* GetTxtPieces(FX_BOOL bReady) const; |
- uint32_t GetUnifiedCharType(uint32_t dwType) const; |
- void ResetArabicContext(); |
- void ResetContextCharStyles(); |
- void EndBreak_UpdateArabicShapes(); |
- FX_BOOL EndBreak_SplitLine(CFX_TxtLine* pNextLine, |
- FX_BOOL bAllChars, |
- uint32_t dwStatus); |
- void EndBreak_BidiLine(CFX_TPOArray& tpos, uint32_t dwStatus); |
- void EndBreak_Alignment(CFX_TPOArray& tpos, |
- FX_BOOL bAllChars, |
- uint32_t dwStatus); |
- int32_t GetBreakPos(CFX_TxtCharArray& ca, |
- int32_t& iEndPos, |
- FX_BOOL bAllChars = FALSE, |
- FX_BOOL bOnlyBrk = FALSE); |
- void SplitTextLine(CFX_TxtLine* pCurLine, |
- CFX_TxtLine* pNextLine, |
- FX_BOOL bAllChars = FALSE); |
-}; |
- |
-} // namespace |
- |
-extern const FX_LINEBREAKTYPE gs_FX_LineBreak_PairTable[64][32]; |
-IFX_TxtBreak* IFX_TxtBreak::Create(uint32_t dwPolicies) { |
- return new CFX_TxtBreak(dwPolicies); |
-} |
CFX_TxtBreak::CFX_TxtBreak(uint32_t dwPolicies) |
: m_dwPolicies(dwPolicies), |
m_pArabicChar(NULL), |
@@ -216,7 +51,7 @@ CFX_TxtBreak::CFX_TxtBreak(uint32_t dwPolicies) |
m_iVerScale(100), |
m_iCharSpace(0) { |
m_bPagination = (m_dwPolicies & FX_TXTBREAKPOLICY_Pagination) != 0; |
- m_pArabicChar = IFX_ArabicChar::Create(); |
+ m_pArabicChar = new CFX_ArabicChar; |
if (m_bPagination) { |
m_pTxtLine1 = new CFX_TxtLine(sizeof(CFX_Char)); |
m_pTxtLine2 = new CFX_TxtLine(sizeof(CFX_Char)); |