diff options
author | Dan Sinclair <dsinclair@chromium.org> | 2017-03-21 11:31:25 -0400 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2017-03-21 15:55:35 +0000 |
commit | 5c529e6318d46121a5ea38d3edb42c8d9f580fe8 (patch) | |
tree | f11ae317bb4cdb94e69e9b1ae1a6db6342218b61 /xfa/fgas/layout/fgas_rtfbreak.cpp | |
parent | a766a958c5867a2a5562095ad03f72290db18b98 (diff) | |
download | pdfium-5c529e6318d46121a5ea38d3edb42c8d9f580fe8.tar.xz |
Combine more RTF and TXT Break code
This Cl conbines several more methods from RTFBreak and TXTBreak into
the common Break baseclass.
Change-Id: Ibe2236eb4fd30faab239e7c9c8b578164014eb39
Reviewed-on: https://pdfium-review.googlesource.com/3108
Reviewed-by: Nicolás Peña <npm@chromium.org>
Commit-Queue: dsinclair <dsinclair@chromium.org>
Diffstat (limited to 'xfa/fgas/layout/fgas_rtfbreak.cpp')
-rw-r--r-- | xfa/fgas/layout/fgas_rtfbreak.cpp | 72 |
1 files changed, 6 insertions, 66 deletions
diff --git a/xfa/fgas/layout/fgas_rtfbreak.cpp b/xfa/fgas/layout/fgas_rtfbreak.cpp index 81fbea0cc6..07a3cefa69 100644 --- a/xfa/fgas/layout/fgas_rtfbreak.cpp +++ b/xfa/fgas/layout/fgas_rtfbreak.cpp @@ -17,8 +17,7 @@ CFX_RTFBreak::CFX_RTFBreak(uint32_t dwLayoutStyles) : CFX_Break(dwLayoutStyles), m_bPagination(false), m_iAlignment(CFX_RTFLineAlignment::Left), - m_pUserData(nullptr), - m_dwIdentity(0) { + m_pUserData(nullptr) { SetBreakStatus(); m_bPagination = !!(m_dwLayoutStyles & FX_LAYOUTSTYLE_Pagination); } @@ -50,40 +49,6 @@ void CFX_RTFBreak::SetUserData(const CFX_RetainPtr<CFX_Retainable>& pUserData) { m_pUserData = pUserData; } -void CFX_RTFBreak::SetBreakStatus() { - ++m_dwIdentity; - int32_t iCount = m_pCurLine->CountChars(); - if (iCount < 1) - return; - - CFX_Char* tc = m_pCurLine->GetChar(iCount - 1); - if (tc->m_dwStatus == CFX_BreakType::None) - tc->m_dwStatus = CFX_BreakType::Piece; -} - -CFX_Char* CFX_RTFBreak::GetLastChar(int32_t index) const { - std::vector<CFX_Char>& tca = m_pCurLine->m_LineChars; - int32_t iCount = pdfium::CollectionSize<int32_t>(tca); - if (index < 0 || index >= iCount) - return nullptr; - - int32_t iStart = iCount - 1; - while (iStart > -1) { - CFX_Char* pTC = &tca[iStart--]; - if (pTC->m_iCharWidth >= 0 || - pTC->GetCharType() != FX_CHARTYPE_Combination) { - if (--index < 0) - return pTC; - } - } - return nullptr; -} - -inline FX_CHARTYPE CFX_RTFBreak::GetUnifiedCharType( - FX_CHARTYPE chartype) const { - return chartype >= FX_CHARTYPE_ArabicAlef ? FX_CHARTYPE_Arabic : chartype; -} - int32_t CFX_RTFBreak::GetLastPositionedTab() const { return m_PositionedTabs.empty() ? m_iLineStart : m_PositionedTabs.back(); } @@ -167,7 +132,7 @@ void CFX_RTFBreak::AppendChar_Combination(CFX_Char* pCurChar) { iCharWidth *= m_iFontSize; iCharWidth = iCharWidth * m_iHorizontalScale / 100; - CFX_Char* pLastChar = GetLastChar(0); + CFX_Char* pLastChar = GetLastChar(0, false, true); if (pLastChar && pLastChar->GetCharType() > FX_CHARTYPE_Combination) iCharWidth = -iCharWidth; else @@ -224,10 +189,10 @@ CFX_BreakType CFX_RTFBreak::AppendChar_Arabic(CFX_Char* pCurChar) { bool bAlef = false; if (m_eCharType >= FX_CHARTYPE_ArabicAlef && m_eCharType <= FX_CHARTYPE_ArabicDistortion) { - pLastChar = GetLastChar(1); + pLastChar = GetLastChar(1, false, true); if (pLastChar) { m_pCurLine->m_iWidth -= pLastChar->m_iCharWidth; - CFX_Char* pPrevChar = GetLastChar(2); + CFX_Char* pPrevChar = GetLastChar(2, false, true); wForm = pdfium::arabic::GetFormChar(pLastChar, pPrevChar, pCurChar); bAlef = (wForm == 0xFEFF && pLastChar->GetCharType() == FX_CHARTYPE_ArabicAlef); @@ -292,7 +257,7 @@ CFX_BreakType CFX_RTFBreak::EndBreak(CFX_BreakType dwStatus) { return m_pCurLine->m_LinePieces.back().m_dwStatus; } - if (HasRTFLine()) { + if (HasLine()) { if (!m_Line[m_iReadyLineIndex].m_LinePieces.empty()) { if (dwStatus != CFX_BreakType::Piece) m_Line[m_iReadyLineIndex].m_LinePieces.back().m_dwStatus = dwStatus; @@ -324,7 +289,7 @@ CFX_BreakType CFX_RTFBreak::EndBreak(CFX_BreakType dwStatus) { m_pCurLine = pNextLine; m_pCurLine->m_iStart = m_iLineStart; - CFX_Char* pTC = GetLastChar(0); + CFX_Char* pTC = GetLastChar(0, false, true); m_eCharType = pTC ? pTC->GetCharType() : FX_CHARTYPE_Unknown; return dwStatus; } @@ -698,31 +663,6 @@ void CFX_RTFBreak::SplitTextLine(CFX_BreakLine* pCurLine, } } -int32_t CFX_RTFBreak::CountBreakPieces() const { - return HasRTFLine() ? pdfium::CollectionSize<int32_t>( - m_Line[m_iReadyLineIndex].m_LinePieces) - : 0; -} - -const CFX_BreakPiece* CFX_RTFBreak::GetBreakPieceUnstable(int32_t index) const { - if (!HasRTFLine()) - return nullptr; - - const std::vector<CFX_BreakPiece>& pRTFPieces = - m_Line[m_iReadyLineIndex].m_LinePieces; - if (!pdfium::IndexInBounds(pRTFPieces, index)) - return nullptr; - - return &pRTFPieces[index]; -} - -void CFX_RTFBreak::ClearBreakPieces() { - if (HasRTFLine()) - m_Line[m_iReadyLineIndex].Clear(); - - m_iReadyLineIndex = -1; -} - int32_t CFX_RTFBreak::GetDisplayPos(const FX_RTFTEXTOBJ* pText, FXTEXT_CHARPOS* pCharPos, bool bCharCode) const { |