summaryrefslogtreecommitdiff
path: root/xfa/fgas/layout/fgas_rtfbreak.cpp
diff options
context:
space:
mode:
authorDan Sinclair <dsinclair@chromium.org>2017-03-21 11:31:25 -0400
committerChromium commit bot <commit-bot@chromium.org>2017-03-21 15:55:35 +0000
commit5c529e6318d46121a5ea38d3edb42c8d9f580fe8 (patch)
treef11ae317bb4cdb94e69e9b1ae1a6db6342218b61 /xfa/fgas/layout/fgas_rtfbreak.cpp
parenta766a958c5867a2a5562095ad03f72290db18b98 (diff)
downloadpdfium-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.cpp72
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 {