diff options
Diffstat (limited to 'xfa/src/fee/src/fee/fde_txtedtparag.cpp')
-rw-r--r-- | xfa/src/fee/src/fee/fde_txtedtparag.cpp | 296 |
1 files changed, 148 insertions, 148 deletions
diff --git a/xfa/src/fee/src/fee/fde_txtedtparag.cpp b/xfa/src/fee/src/fee/fde_txtedtparag.cpp index 7be3a27e24..a2b721c539 100644 --- a/xfa/src/fee/src/fee/fde_txtedtparag.cpp +++ b/xfa/src/fee/src/fee/fde_txtedtparag.cpp @@ -1,148 +1,148 @@ -// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "xfa/src/foxitlib.h"
-#include "xfa/src/fee/include/ifde_txtedtbuf.h"
-#include "xfa/src/fee/include/ifde_txtedtengine.h"
-#include "xfa/src/fee/include/fx_wordbreak.h"
-#include "fde_txtedtparag.h"
-#include "fde_txtedtengine.h"
-#include "fde_txtedtbuf.h"
-CFDE_TxtEdtParag::CFDE_TxtEdtParag(CFDE_TxtEdtEngine* pEngine)
- : m_nCharStart(0),
- m_nCharCount(0),
- m_nLineCount(0),
- m_lpData(NULL),
- m_pEngine(pEngine) {
- FXSYS_assert(m_pEngine);
-}
-CFDE_TxtEdtParag::~CFDE_TxtEdtParag() {
- if (m_lpData != NULL) {
- FX_Free(m_lpData);
- }
-}
-void CFDE_TxtEdtParag::LoadParag() {
- if (m_lpData != NULL) {
- ((int32_t*)m_lpData)[0]++;
- return;
- }
- IFX_TxtBreak* pTxtBreak = m_pEngine->GetTextBreak();
- IFDE_TxtEdtBuf* pTxtBuf = m_pEngine->GetTextBuf();
- const FDE_TXTEDTPARAMS* pParam = m_pEngine->GetEditParams();
- FX_WCHAR wcAlias = 0;
- if (pParam->dwMode & FDE_TEXTEDITMODE_Password) {
- wcAlias = m_pEngine->GetAliasChar();
- }
- IFX_CharIter* pIter =
- new CFDE_TxtEdtBufIter((CFDE_TxtEdtBuf*)pTxtBuf, wcAlias);
- pIter->SetAt(m_nCharStart);
- int32_t nEndIndex = m_nCharStart + m_nCharCount;
- CFX_ArrayTemplate<int32_t> LineBaseArr;
- FX_BOOL bReload = FALSE;
- FX_DWORD dwBreakStatus = FX_TXTBREAK_None;
- do {
- if (bReload) {
- dwBreakStatus = pTxtBreak->EndBreak(FX_TXTBREAK_ParagraphBreak);
- } else {
- FX_WCHAR wAppend = pIter->GetChar();
- dwBreakStatus = pTxtBreak->AppendChar(wAppend);
- }
- if (pIter->GetAt() + 1 == nEndIndex &&
- dwBreakStatus < FX_TXTBREAK_LineBreak) {
- dwBreakStatus = pTxtBreak->EndBreak(FX_TXTBREAK_ParagraphBreak);
- }
- if (dwBreakStatus > FX_TXTBREAK_PieceBreak) {
- int32_t nCount = pTxtBreak->CountBreakPieces();
- int32_t nTotal = 0;
- for (int32_t j = 0; j < nCount; j++) {
- const CFX_TxtPiece* Piece = pTxtBreak->GetBreakPiece(j);
- nTotal += Piece->GetLength();
- }
- LineBaseArr.Add(nTotal);
- pTxtBreak->ClearBreakPieces();
- }
- if ((pIter->GetAt() + 1 == nEndIndex) &&
- (dwBreakStatus == FX_TXTBREAK_LineBreak)) {
- bReload = TRUE;
- pIter->Next(TRUE);
- }
- } while (pIter->Next(FALSE) && (pIter->GetAt() < nEndIndex));
- pIter->Release();
- pTxtBreak->EndBreak(FX_TXTBREAK_ParagraphBreak);
- pTxtBreak->ClearBreakPieces();
- int32_t nLineCount = LineBaseArr.GetSize();
- m_nLineCount = nLineCount;
- if (m_lpData == NULL) {
- m_lpData = FX_Alloc(int32_t, nLineCount + 1);
- } else {
- m_lpData = FX_Realloc(int32_t, m_lpData, (nLineCount + 1));
- }
- int32_t* pIntArr = (int32_t*)m_lpData;
- pIntArr[0] = 1;
- m_nLineCount = nLineCount;
- pIntArr++;
- for (int32_t j = 0; j < nLineCount; j++, pIntArr++) {
- *pIntArr = LineBaseArr[j];
- }
- LineBaseArr.RemoveAll();
-}
-void CFDE_TxtEdtParag::UnloadParag() {
- FXSYS_assert(m_lpData != NULL);
- ((int32_t*)m_lpData)[0]--;
- FXSYS_assert(((int32_t*)m_lpData)[0] >= 0);
- if (((int32_t*)m_lpData)[0] == 0) {
- FX_Free(m_lpData);
- m_lpData = NULL;
- }
-}
-void CFDE_TxtEdtParag::CalcLines() {
- IFX_TxtBreak* pTxtBreak = m_pEngine->GetTextBreak();
- IFDE_TxtEdtBuf* pTxtBuf = m_pEngine->GetTextBuf();
- IFX_CharIter* pIter = new CFDE_TxtEdtBufIter((CFDE_TxtEdtBuf*)pTxtBuf);
- int32_t nCount = 0;
- FX_DWORD dwBreakStatus = FX_TXTBREAK_None;
- int32_t nEndIndex = m_nCharStart + m_nCharCount;
- pIter->SetAt(m_nCharStart);
- FX_BOOL bReload = FALSE;
- do {
- if (bReload) {
- dwBreakStatus = pTxtBreak->EndBreak(FX_TXTBREAK_ParagraphBreak);
- } else {
- FX_WCHAR wAppend = pIter->GetChar();
- dwBreakStatus = pTxtBreak->AppendChar(wAppend);
- }
- if (pIter->GetAt() + 1 == nEndIndex &&
- dwBreakStatus < FX_TXTBREAK_LineBreak) {
- dwBreakStatus = pTxtBreak->EndBreak(FX_TXTBREAK_ParagraphBreak);
- }
- if (dwBreakStatus > FX_TXTBREAK_PieceBreak) {
- nCount++;
- pTxtBreak->ClearBreakPieces();
- }
- if ((pIter->GetAt() + 1 == nEndIndex) &&
- (dwBreakStatus == FX_TXTBREAK_LineBreak)) {
- bReload = TRUE;
- pIter->Next(TRUE);
- }
- } while (pIter->Next(FALSE) && (pIter->GetAt() < nEndIndex));
- pIter->Release();
- pTxtBreak->EndBreak(FX_TXTBREAK_ParagraphBreak);
- pTxtBreak->ClearBreakPieces();
- m_nLineCount = nCount;
-}
-void CFDE_TxtEdtParag::GetLineRange(int32_t nLineIndex,
- int32_t& nStart,
- int32_t& nCount) const {
- int32_t* pLineBaseArr = (int32_t*)m_lpData;
- FXSYS_assert(nLineIndex < m_nLineCount);
- nStart = m_nCharStart;
- pLineBaseArr++;
- for (int32_t i = 0; i < nLineIndex; i++) {
- nStart += *pLineBaseArr;
- pLineBaseArr++;
- }
- nCount = *pLineBaseArr;
-}
+// Copyright 2014 PDFium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com + +#include "xfa/src/foxitlib.h" +#include "xfa/src/fee/include/ifde_txtedtbuf.h" +#include "xfa/src/fee/include/ifde_txtedtengine.h" +#include "xfa/src/fee/include/fx_wordbreak.h" +#include "fde_txtedtparag.h" +#include "fde_txtedtengine.h" +#include "fde_txtedtbuf.h" +CFDE_TxtEdtParag::CFDE_TxtEdtParag(CFDE_TxtEdtEngine* pEngine) + : m_nCharStart(0), + m_nCharCount(0), + m_nLineCount(0), + m_lpData(NULL), + m_pEngine(pEngine) { + FXSYS_assert(m_pEngine); +} +CFDE_TxtEdtParag::~CFDE_TxtEdtParag() { + if (m_lpData != NULL) { + FX_Free(m_lpData); + } +} +void CFDE_TxtEdtParag::LoadParag() { + if (m_lpData != NULL) { + ((int32_t*)m_lpData)[0]++; + return; + } + IFX_TxtBreak* pTxtBreak = m_pEngine->GetTextBreak(); + IFDE_TxtEdtBuf* pTxtBuf = m_pEngine->GetTextBuf(); + const FDE_TXTEDTPARAMS* pParam = m_pEngine->GetEditParams(); + FX_WCHAR wcAlias = 0; + if (pParam->dwMode & FDE_TEXTEDITMODE_Password) { + wcAlias = m_pEngine->GetAliasChar(); + } + IFX_CharIter* pIter = + new CFDE_TxtEdtBufIter((CFDE_TxtEdtBuf*)pTxtBuf, wcAlias); + pIter->SetAt(m_nCharStart); + int32_t nEndIndex = m_nCharStart + m_nCharCount; + CFX_ArrayTemplate<int32_t> LineBaseArr; + FX_BOOL bReload = FALSE; + FX_DWORD dwBreakStatus = FX_TXTBREAK_None; + do { + if (bReload) { + dwBreakStatus = pTxtBreak->EndBreak(FX_TXTBREAK_ParagraphBreak); + } else { + FX_WCHAR wAppend = pIter->GetChar(); + dwBreakStatus = pTxtBreak->AppendChar(wAppend); + } + if (pIter->GetAt() + 1 == nEndIndex && + dwBreakStatus < FX_TXTBREAK_LineBreak) { + dwBreakStatus = pTxtBreak->EndBreak(FX_TXTBREAK_ParagraphBreak); + } + if (dwBreakStatus > FX_TXTBREAK_PieceBreak) { + int32_t nCount = pTxtBreak->CountBreakPieces(); + int32_t nTotal = 0; + for (int32_t j = 0; j < nCount; j++) { + const CFX_TxtPiece* Piece = pTxtBreak->GetBreakPiece(j); + nTotal += Piece->GetLength(); + } + LineBaseArr.Add(nTotal); + pTxtBreak->ClearBreakPieces(); + } + if ((pIter->GetAt() + 1 == nEndIndex) && + (dwBreakStatus == FX_TXTBREAK_LineBreak)) { + bReload = TRUE; + pIter->Next(TRUE); + } + } while (pIter->Next(FALSE) && (pIter->GetAt() < nEndIndex)); + pIter->Release(); + pTxtBreak->EndBreak(FX_TXTBREAK_ParagraphBreak); + pTxtBreak->ClearBreakPieces(); + int32_t nLineCount = LineBaseArr.GetSize(); + m_nLineCount = nLineCount; + if (m_lpData == NULL) { + m_lpData = FX_Alloc(int32_t, nLineCount + 1); + } else { + m_lpData = FX_Realloc(int32_t, m_lpData, (nLineCount + 1)); + } + int32_t* pIntArr = (int32_t*)m_lpData; + pIntArr[0] = 1; + m_nLineCount = nLineCount; + pIntArr++; + for (int32_t j = 0; j < nLineCount; j++, pIntArr++) { + *pIntArr = LineBaseArr[j]; + } + LineBaseArr.RemoveAll(); +} +void CFDE_TxtEdtParag::UnloadParag() { + FXSYS_assert(m_lpData != NULL); + ((int32_t*)m_lpData)[0]--; + FXSYS_assert(((int32_t*)m_lpData)[0] >= 0); + if (((int32_t*)m_lpData)[0] == 0) { + FX_Free(m_lpData); + m_lpData = NULL; + } +} +void CFDE_TxtEdtParag::CalcLines() { + IFX_TxtBreak* pTxtBreak = m_pEngine->GetTextBreak(); + IFDE_TxtEdtBuf* pTxtBuf = m_pEngine->GetTextBuf(); + IFX_CharIter* pIter = new CFDE_TxtEdtBufIter((CFDE_TxtEdtBuf*)pTxtBuf); + int32_t nCount = 0; + FX_DWORD dwBreakStatus = FX_TXTBREAK_None; + int32_t nEndIndex = m_nCharStart + m_nCharCount; + pIter->SetAt(m_nCharStart); + FX_BOOL bReload = FALSE; + do { + if (bReload) { + dwBreakStatus = pTxtBreak->EndBreak(FX_TXTBREAK_ParagraphBreak); + } else { + FX_WCHAR wAppend = pIter->GetChar(); + dwBreakStatus = pTxtBreak->AppendChar(wAppend); + } + if (pIter->GetAt() + 1 == nEndIndex && + dwBreakStatus < FX_TXTBREAK_LineBreak) { + dwBreakStatus = pTxtBreak->EndBreak(FX_TXTBREAK_ParagraphBreak); + } + if (dwBreakStatus > FX_TXTBREAK_PieceBreak) { + nCount++; + pTxtBreak->ClearBreakPieces(); + } + if ((pIter->GetAt() + 1 == nEndIndex) && + (dwBreakStatus == FX_TXTBREAK_LineBreak)) { + bReload = TRUE; + pIter->Next(TRUE); + } + } while (pIter->Next(FALSE) && (pIter->GetAt() < nEndIndex)); + pIter->Release(); + pTxtBreak->EndBreak(FX_TXTBREAK_ParagraphBreak); + pTxtBreak->ClearBreakPieces(); + m_nLineCount = nCount; +} +void CFDE_TxtEdtParag::GetLineRange(int32_t nLineIndex, + int32_t& nStart, + int32_t& nCount) const { + int32_t* pLineBaseArr = (int32_t*)m_lpData; + FXSYS_assert(nLineIndex < m_nLineCount); + nStart = m_nCharStart; + pLineBaseArr++; + for (int32_t i = 0; i < nLineIndex; i++) { + nStart += *pLineBaseArr; + pLineBaseArr++; + } + nCount = *pLineBaseArr; +} |