Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(122)

Side by Side Diff: xfa/src/fee/fde_txtedtparag.cpp

Issue 1803723002: Move xfa/src up to xfa/. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Rebase to master Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « xfa/src/fee/fde_txtedtparag.h ('k') | xfa/src/fee/fx_wordbreak/fx_wordbreak.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7 #include "xfa/src/fee/fde_txtedtparag.h"
8
9 #include "xfa/src/fee/fde_txtedtbuf.h"
10 #include "xfa/src/fee/fde_txtedtengine.h"
11 #include "xfa/src/fee/fx_wordbreak/fx_wordbreak.h"
12 #include "xfa/src/fee/ifde_txtedtbuf.h"
13 #include "xfa/src/fee/ifde_txtedtengine.h"
14 #include "xfa/src/fgas/layout/fgas_textbreak.h"
15
16 CFDE_TxtEdtParag::CFDE_TxtEdtParag(CFDE_TxtEdtEngine* pEngine)
17 : m_nCharStart(0),
18 m_nCharCount(0),
19 m_nLineCount(0),
20 m_lpData(NULL),
21 m_pEngine(pEngine) {
22 FXSYS_assert(m_pEngine);
23 }
24 CFDE_TxtEdtParag::~CFDE_TxtEdtParag() {
25 if (m_lpData != NULL) {
26 FX_Free(m_lpData);
27 }
28 }
29 void CFDE_TxtEdtParag::LoadParag() {
30 if (m_lpData != NULL) {
31 ((int32_t*)m_lpData)[0]++;
32 return;
33 }
34 IFX_TxtBreak* pTxtBreak = m_pEngine->GetTextBreak();
35 IFDE_TxtEdtBuf* pTxtBuf = m_pEngine->GetTextBuf();
36 const FDE_TXTEDTPARAMS* pParam = m_pEngine->GetEditParams();
37 FX_WCHAR wcAlias = 0;
38 if (pParam->dwMode & FDE_TEXTEDITMODE_Password) {
39 wcAlias = m_pEngine->GetAliasChar();
40 }
41 IFX_CharIter* pIter =
42 new CFDE_TxtEdtBufIter((CFDE_TxtEdtBuf*)pTxtBuf, wcAlias);
43 pIter->SetAt(m_nCharStart);
44 int32_t nEndIndex = m_nCharStart + m_nCharCount;
45 CFX_ArrayTemplate<int32_t> LineBaseArr;
46 FX_BOOL bReload = FALSE;
47 FX_DWORD dwBreakStatus = FX_TXTBREAK_None;
48 do {
49 if (bReload) {
50 dwBreakStatus = pTxtBreak->EndBreak(FX_TXTBREAK_ParagraphBreak);
51 } else {
52 FX_WCHAR wAppend = pIter->GetChar();
53 dwBreakStatus = pTxtBreak->AppendChar(wAppend);
54 }
55 if (pIter->GetAt() + 1 == nEndIndex &&
56 dwBreakStatus < FX_TXTBREAK_LineBreak) {
57 dwBreakStatus = pTxtBreak->EndBreak(FX_TXTBREAK_ParagraphBreak);
58 }
59 if (dwBreakStatus > FX_TXTBREAK_PieceBreak) {
60 int32_t nCount = pTxtBreak->CountBreakPieces();
61 int32_t nTotal = 0;
62 for (int32_t j = 0; j < nCount; j++) {
63 const CFX_TxtPiece* Piece = pTxtBreak->GetBreakPiece(j);
64 nTotal += Piece->GetLength();
65 }
66 LineBaseArr.Add(nTotal);
67 pTxtBreak->ClearBreakPieces();
68 }
69 if ((pIter->GetAt() + 1 == nEndIndex) &&
70 (dwBreakStatus == FX_TXTBREAK_LineBreak)) {
71 bReload = TRUE;
72 pIter->Next(TRUE);
73 }
74 } while (pIter->Next(FALSE) && (pIter->GetAt() < nEndIndex));
75 pIter->Release();
76 pTxtBreak->EndBreak(FX_TXTBREAK_ParagraphBreak);
77 pTxtBreak->ClearBreakPieces();
78 int32_t nLineCount = LineBaseArr.GetSize();
79 m_nLineCount = nLineCount;
80 if (m_lpData == NULL) {
81 m_lpData = FX_Alloc(int32_t, nLineCount + 1);
82 } else {
83 m_lpData = FX_Realloc(int32_t, m_lpData, (nLineCount + 1));
84 }
85 int32_t* pIntArr = (int32_t*)m_lpData;
86 pIntArr[0] = 1;
87 m_nLineCount = nLineCount;
88 pIntArr++;
89 for (int32_t j = 0; j < nLineCount; j++, pIntArr++) {
90 *pIntArr = LineBaseArr[j];
91 }
92 LineBaseArr.RemoveAll();
93 }
94 void CFDE_TxtEdtParag::UnloadParag() {
95 FXSYS_assert(m_lpData != NULL);
96 ((int32_t*)m_lpData)[0]--;
97 FXSYS_assert(((int32_t*)m_lpData)[0] >= 0);
98 if (((int32_t*)m_lpData)[0] == 0) {
99 FX_Free(m_lpData);
100 m_lpData = NULL;
101 }
102 }
103 void CFDE_TxtEdtParag::CalcLines() {
104 IFX_TxtBreak* pTxtBreak = m_pEngine->GetTextBreak();
105 IFDE_TxtEdtBuf* pTxtBuf = m_pEngine->GetTextBuf();
106 IFX_CharIter* pIter = new CFDE_TxtEdtBufIter((CFDE_TxtEdtBuf*)pTxtBuf);
107 int32_t nCount = 0;
108 FX_DWORD dwBreakStatus = FX_TXTBREAK_None;
109 int32_t nEndIndex = m_nCharStart + m_nCharCount;
110 pIter->SetAt(m_nCharStart);
111 FX_BOOL bReload = FALSE;
112 do {
113 if (bReload) {
114 dwBreakStatus = pTxtBreak->EndBreak(FX_TXTBREAK_ParagraphBreak);
115 } else {
116 FX_WCHAR wAppend = pIter->GetChar();
117 dwBreakStatus = pTxtBreak->AppendChar(wAppend);
118 }
119 if (pIter->GetAt() + 1 == nEndIndex &&
120 dwBreakStatus < FX_TXTBREAK_LineBreak) {
121 dwBreakStatus = pTxtBreak->EndBreak(FX_TXTBREAK_ParagraphBreak);
122 }
123 if (dwBreakStatus > FX_TXTBREAK_PieceBreak) {
124 nCount++;
125 pTxtBreak->ClearBreakPieces();
126 }
127 if ((pIter->GetAt() + 1 == nEndIndex) &&
128 (dwBreakStatus == FX_TXTBREAK_LineBreak)) {
129 bReload = TRUE;
130 pIter->Next(TRUE);
131 }
132 } while (pIter->Next(FALSE) && (pIter->GetAt() < nEndIndex));
133 pIter->Release();
134 pTxtBreak->EndBreak(FX_TXTBREAK_ParagraphBreak);
135 pTxtBreak->ClearBreakPieces();
136 m_nLineCount = nCount;
137 }
138 void CFDE_TxtEdtParag::GetLineRange(int32_t nLineIndex,
139 int32_t& nStart,
140 int32_t& nCount) const {
141 int32_t* pLineBaseArr = (int32_t*)m_lpData;
142 FXSYS_assert(nLineIndex < m_nLineCount);
143 nStart = m_nCharStart;
144 pLineBaseArr++;
145 for (int32_t i = 0; i < nLineIndex; i++) {
146 nStart += *pLineBaseArr;
147 pLineBaseArr++;
148 }
149 nCount = *pLineBaseArr;
150 }
OLDNEW
« no previous file with comments | « xfa/src/fee/fde_txtedtparag.h ('k') | xfa/src/fee/fx_wordbreak/fx_wordbreak.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698