| Index: xfa/fgas/layout/fgas_rtfbreak.cpp
|
| diff --git a/xfa/fgas/layout/fgas_rtfbreak.cpp b/xfa/fgas/layout/fgas_rtfbreak.cpp
|
| index 52e6267ded9adacc16a867870fa02f313fd50d29..e01578bdc9e06be5a85e8c0420b7f0901dbe4f87 100644
|
| --- a/xfa/fgas/layout/fgas_rtfbreak.cpp
|
| +++ b/xfa/fgas/layout/fgas_rtfbreak.cpp
|
| @@ -273,15 +273,14 @@ void CFX_RTFBreak::SetBreakStatus() {
|
| }
|
| }
|
| CFX_RTFChar* CFX_RTFBreak::GetLastChar(int32_t index) const {
|
| - CFX_RTFCharArray& tca = m_pCurLine->m_LineChars;
|
| - int32_t iCount = tca.GetSize();
|
| + std::vector<CFX_RTFChar>& tca = m_pCurLine->m_LineChars;
|
| + int32_t iCount = pdfium::CollectionSize<int32_t>(tca);
|
| if (index < 0 || index >= iCount) {
|
| return nullptr;
|
| }
|
| - CFX_RTFChar* pTC;
|
| int32_t iStart = iCount - 1;
|
| while (iStart > -1) {
|
| - pTC = tca.GetDataPtr(iStart--);
|
| + CFX_RTFChar* pTC = &tca[iStart--];
|
| if (pTC->m_iCharWidth >= 0 ||
|
| pTC->GetCharType() != FX_CHARTYPE_Combination) {
|
| if (--index < 0) {
|
| @@ -349,8 +348,8 @@ uint32_t CFX_RTFBreak::AppendChar(FX_WCHAR wch) {
|
|
|
| uint32_t dwProps = kTextLayoutCodeProperties[(uint16_t)wch];
|
| FX_CHARTYPE chartype = GetCharTypeFromProp(dwProps);
|
| - CFX_RTFCharArray& tca = m_pCurLine->m_LineChars;
|
| - CFX_RTFChar* pCurChar = tca.AddSpace();
|
| + m_pCurLine->m_LineChars.emplace_back();
|
| + CFX_RTFChar* pCurChar = &m_pCurLine->m_LineChars.back();
|
| pCurChar->m_dwStatus = 0;
|
| pCurChar->m_wCharCode = wch;
|
| pCurChar->m_dwCharProps = dwProps;
|
| @@ -377,7 +376,7 @@ uint32_t CFX_RTFBreak::AppendChar(FX_WCHAR wch) {
|
| dwRet1 = EndBreak(FX_RTFBREAK_LineBreak);
|
| int32_t iCount = m_pCurLine->CountChars();
|
| if (iCount > 0) {
|
| - pCurChar = m_pCurLine->m_LineChars.GetDataPtr(iCount - 1);
|
| + pCurChar = &m_pCurLine->m_LineChars[iCount - 1];
|
| }
|
| }
|
| }
|
| @@ -397,8 +396,8 @@ uint32_t CFX_RTFBreak::AppendChar_CharCode(FX_WCHAR wch) {
|
| ASSERT(m_pFont && m_pCurLine);
|
| ASSERT(m_bCharCode);
|
| m_pCurLine->m_iMBCSChars++;
|
| - CFX_RTFCharArray& tca = m_pCurLine->m_LineChars;
|
| - CFX_RTFChar* pCurChar = tca.AddSpace();
|
| + m_pCurLine->m_LineChars.emplace_back();
|
| + CFX_RTFChar* pCurChar = &m_pCurLine->m_LineChars.back();
|
| pCurChar->m_dwStatus = 0;
|
| pCurChar->m_wCharCode = wch;
|
| pCurChar->m_dwCharProps = 0;
|
| @@ -696,7 +695,7 @@ bool CFX_RTFBreak::EndBreak_SplitLine(CFX_RTFLine* pNextLine,
|
| }
|
| }
|
| if (m_bPagination || m_pCurLine->m_iMBCSChars > 0) {
|
| - const CFX_RTFChar* pCurChars = m_pCurLine->m_LineChars.GetData();
|
| + const CFX_RTFChar* pCurChars = m_pCurLine->m_LineChars.data();
|
| const CFX_RTFChar* pTC;
|
| CFX_RTFPieceArray* pCurPieces = &m_pCurLine->m_LinePieces;
|
| CFX_RTFPiece tp;
|
| @@ -751,14 +750,14 @@ void CFX_RTFBreak::EndBreak_BidiLine(CFX_TPOArray& tpos, uint32_t dwStatus) {
|
| CFX_RTFPiece tp;
|
| CFX_RTFChar* pTC;
|
| int32_t i, j;
|
| - CFX_RTFCharArray& chars = m_pCurLine->m_LineChars;
|
| + std::vector<CFX_RTFChar>& chars = m_pCurLine->m_LineChars;
|
| int32_t iCount = m_pCurLine->CountChars();
|
| bool bDone = (!m_bPagination && !m_bCharCode &&
|
| (m_pCurLine->m_iArabicChars > 0 || m_bRTL));
|
| if (bDone) {
|
| int32_t iBidiNum = 0;
|
| for (i = 0; i < iCount; i++) {
|
| - pTC = chars.GetDataPtr(i);
|
| + pTC = &chars[i];
|
| pTC->m_iBidiPos = i;
|
| if (pTC->GetCharType() != FX_CHARTYPE_Control) {
|
| iBidiNum = i;
|
| @@ -770,7 +769,7 @@ void CFX_RTFBreak::EndBreak_BidiLine(CFX_TPOArray& tpos, uint32_t dwStatus) {
|
| FX_BidiLine(chars, iBidiNum + 1, m_bRTL ? 1 : 0);
|
| } else {
|
| for (i = 0; i < iCount; i++) {
|
| - pTC = chars.GetDataPtr(i);
|
| + pTC = &chars[i];
|
| pTC->m_iBidiLevel = 0;
|
| pTC->m_iBidiPos = 0;
|
| pTC->m_iBidiOrder = 0;
|
| @@ -784,7 +783,7 @@ void CFX_RTFBreak::EndBreak_BidiLine(CFX_TPOArray& tpos, uint32_t dwStatus) {
|
| uint32_t dwIdentity = (uint32_t)-1;
|
| i = j = 0;
|
| while (i < iCount) {
|
| - pTC = chars.GetDataPtr(i);
|
| + pTC = &chars[i];
|
| if (iBidiLevel < 0) {
|
| iBidiLevel = pTC->m_iBidiLevel;
|
| iCharWidth = pTC->m_iCharWidth;
|
| @@ -933,11 +932,11 @@ void CFX_RTFBreak::EndBreak_Alignment(CFX_TPOArray& tpos,
|
| }
|
| }
|
|
|
| -int32_t CFX_RTFBreak::GetBreakPos(CFX_RTFCharArray& tca,
|
| +int32_t CFX_RTFBreak::GetBreakPos(std::vector<CFX_RTFChar>& tca,
|
| int32_t& iEndPos,
|
| bool bAllChars,
|
| bool bOnlyBrk) {
|
| - int32_t iLength = tca.GetSize() - 1;
|
| + int32_t iLength = pdfium::CollectionSize<int32_t>(tca) - 1;
|
| if (iLength < 1)
|
| return iLength;
|
|
|
| @@ -950,7 +949,7 @@ int32_t CFX_RTFBreak::GetBreakPos(CFX_RTFCharArray& tca,
|
| iBreak = iLength;
|
| iBreakPos = iEndPos;
|
| }
|
| - CFX_RTFChar* pCharArray = tca.GetData();
|
| + CFX_RTFChar* pCharArray = tca.data();
|
| if (m_bCharCode) {
|
| const CFX_RTFChar* pChar;
|
| int32_t iCharWidth;
|
| @@ -1071,7 +1070,7 @@ void CFX_RTFBreak::SplitTextLine(CFX_RTFLine* pCurLine,
|
| return;
|
| }
|
| int32_t iEndPos = pCurLine->GetLineEnd();
|
| - CFX_RTFCharArray& curChars = pCurLine->m_LineChars;
|
| + std::vector<CFX_RTFChar>& curChars = pCurLine->m_LineChars;
|
| int32_t iCharPos = GetBreakPos(curChars, iEndPos, bAllChars, false);
|
| if (iCharPos < 0) {
|
| iCharPos = 0;
|
| @@ -1079,24 +1078,20 @@ void CFX_RTFBreak::SplitTextLine(CFX_RTFLine* pCurLine,
|
| iCharPos++;
|
| if (iCharPos >= iCount) {
|
| pNextLine->RemoveAll(true);
|
| - CFX_Char* pTC = curChars.GetDataPtr(iCharPos - 1);
|
| + CFX_Char* pTC = &curChars[iCharPos - 1];
|
| pTC->m_nBreakType = FX_LBT_UNKNOWN;
|
| return;
|
| }
|
| - CFX_RTFCharArray& nextChars = pNextLine->m_LineChars;
|
| - int cur_size = curChars.GetSize();
|
| - nextChars.SetSize(cur_size - iCharPos);
|
| - FXSYS_memcpy(nextChars.GetData(), curChars.GetDataPtr(iCharPos),
|
| - (cur_size - iCharPos) * sizeof(CFX_RTFChar));
|
| - iCount -= iCharPos;
|
| - cur_size = curChars.GetSize();
|
| - curChars.RemoveAt(cur_size - iCount, iCount);
|
| + std::vector<CFX_RTFChar>& nextChars = pNextLine->m_LineChars;
|
| + nextChars =
|
| + std::vector<CFX_RTFChar>(curChars.begin() + iCharPos, curChars.end());
|
| + curChars.erase(curChars.begin() + iCharPos, curChars.end());
|
| pNextLine->m_iStart = pCurLine->m_iStart;
|
| pNextLine->m_iWidth = pCurLine->GetLineEnd() - iEndPos;
|
| pCurLine->m_iWidth = iEndPos;
|
| - curChars.GetDataPtr(iCharPos - 1)->m_nBreakType = FX_LBT_UNKNOWN;
|
| - iCount = nextChars.GetSize();
|
| - CFX_RTFChar* pNextChars = nextChars.GetData();
|
| + curChars[iCharPos - 1].m_nBreakType = FX_LBT_UNKNOWN;
|
| + iCount = pdfium::CollectionSize<int>(nextChars);
|
| + CFX_RTFChar* pNextChars = nextChars.data();
|
| for (int32_t i = 0; i < iCount; i++) {
|
| CFX_RTFChar* tc = pNextChars + i;
|
| if (tc->GetCharType() >= FX_CHARTYPE_ArabicAlef) {
|
|
|