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

Side by Side Diff: core/fpdfdoc/cpdf_variabletext.cpp

Issue 1959253002: Remove unneeded CPVT classes. (try 2) (Closed) Base URL: https://pdfium.googlesource.com/pdfium@master
Patch Set: Make m_WordArray hold unique_ptrs Created 4 years, 7 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
OLDNEW
1 // Copyright 2016 PDFium Authors. All rights reserved. 1 // Copyright 2016 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 6
7 #include "core/fpdfdoc/include/cpdf_variabletext.h"
8
7 #include "core/fpdfapi/fpdf_font/include/cpdf_font.h" 9 #include "core/fpdfapi/fpdf_font/include/cpdf_font.h"
8 #include "core/fpdfdoc/cpvt_wordinfo.h" 10 #include "core/fpdfdoc/cpvt_wordinfo.h"
9 #include "core/fpdfdoc/csection.h" 11 #include "core/fpdfdoc/csection.h"
10 #include "core/fpdfdoc/include/cpdf_variabletext.h"
11 #include "core/fpdfdoc/include/cpvt_section.h" 12 #include "core/fpdfdoc/include/cpvt_section.h"
12 #include "core/fpdfdoc/include/cpvt_word.h" 13 #include "core/fpdfdoc/include/cpvt_word.h"
13 #include "core/fpdfdoc/include/ipvt_fontmap.h" 14 #include "core/fpdfdoc/include/ipvt_fontmap.h"
14 15
15 namespace { 16 namespace {
16 17
17 const float kDefaultFontSize = 18.0f; 18 const float kDefaultFontSize = 18.0f;
18 const float kFontScale = 0.001f; 19 const float kFontScale = 0.001f;
19 const uint8_t kReturnLength = 1; 20 const uint8_t kReturnLength = 1;
20 const float kScalePercent = 0.01f; 21 const float kScalePercent = 0.01f;
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 return 0; 64 return 0;
64 } 65 }
65 if (CPDF_Font* pSysFont = m_pFontMap->GetPDFFont(1)) { 66 if (CPDF_Font* pSysFont = m_pFontMap->GetPDFFont(1)) {
66 if (pSysFont->CharCodeFromUnicode(word) != CPDF_Font::kInvalidCharCode) 67 if (pSysFont->CharCodeFromUnicode(word) != CPDF_Font::kInvalidCharCode)
67 return 1; 68 return 1;
68 } 69 }
69 return -1; 70 return -1;
70 } 71 }
71 72
72 FX_BOOL CPDF_VariableText::Provider::IsLatinWord(uint16_t word) { 73 FX_BOOL CPDF_VariableText::Provider::IsLatinWord(uint16_t word) {
73 if ((word >= 0x61 && word <= 0x7A) || (word >= 0x41 && word <= 0x5A) || 74 return (word >= 0x61 && word <= 0x7A) || (word >= 0x41 && word <= 0x5A) ||
74 word == 0x2D || word == 0x27) { 75 word == 0x2D || word == 0x27;
75 return TRUE;
76 }
77 return FALSE;
78 } 76 }
79 77
80 int32_t CPDF_VariableText::Provider::GetDefaultFontIndex() { 78 int32_t CPDF_VariableText::Provider::GetDefaultFontIndex() {
81 return 0; 79 return 0;
82 } 80 }
83 81
84 CPDF_VariableText::Iterator::Iterator(CPDF_VariableText* pVT) 82 CPDF_VariableText::Iterator::Iterator(CPDF_VariableText* pVT)
85 : m_CurPos(-1, -1, -1), m_pVT(pVT) {} 83 : m_CurPos(-1, -1, -1), m_pVT(pVT) {}
86 84
87 CPDF_VariableText::Iterator::~Iterator() {} 85 CPDF_VariableText::Iterator::~Iterator() {}
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 ASSERT(m_pVT); 155 ASSERT(m_pVT);
158 if (m_CurPos.nSecIndex > 0) { 156 if (m_CurPos.nSecIndex > 0) {
159 m_CurPos = CPVT_WordPlace(m_CurPos.nSecIndex - 1, 0, -1); 157 m_CurPos = CPVT_WordPlace(m_CurPos.nSecIndex - 1, 0, -1);
160 return TRUE; 158 return TRUE;
161 } 159 }
162 return FALSE; 160 return FALSE;
163 } 161 }
164 162
165 FX_BOOL CPDF_VariableText::Iterator::GetWord(CPVT_Word& word) const { 163 FX_BOOL CPDF_VariableText::Iterator::GetWord(CPVT_Word& word) const {
166 word.WordPlace = m_CurPos; 164 word.WordPlace = m_CurPos;
167 if (CSection* pSection = m_pVT->m_SectionArray.GetAt(m_CurPos.nSecIndex)) { 165 CSection* pSection = m_pVT->m_SectionArray.GetAt(m_CurPos.nSecIndex);
168 if (pSection->m_LineArray.GetAt(m_CurPos.nLineIndex)) { 166 if (!pSection)
169 if (CPVT_WordInfo* pWord = 167 return FALSE;
170 pSection->m_WordArray.GetAt(m_CurPos.nWordIndex)) {
171 word.Word = pWord->Word;
172 word.nCharset = pWord->nCharset;
173 word.fWidth = m_pVT->GetWordWidth(*pWord);
174 word.ptWord = m_pVT->InToOut(
175 CFX_FloatPoint(pWord->fWordX + pSection->m_SecInfo.rcSection.left,
176 pWord->fWordY + pSection->m_SecInfo.rcSection.top));
177 word.fAscent = m_pVT->GetWordAscent(*pWord);
178 word.fDescent = m_pVT->GetWordDescent(*pWord);
179 if (pWord->pWordProps)
180 word.WordProps = *pWord->pWordProps;
181 168
182 word.nFontIndex = m_pVT->GetWordFontIndex(*pWord); 169 if (!pSection->m_LineArray.GetAt(m_CurPos.nLineIndex))
183 word.fFontSize = m_pVT->GetWordFontSize(*pWord); 170 return FALSE;
184 return TRUE; 171
185 } 172 const CPVT_WordInfo* pWord = pSection->GetWord(m_CurPos.nWordIndex);
186 } 173 if (!pWord)
187 } 174 return FALSE;
188 return FALSE; 175
176 word.Word = pWord->Word;
177 word.nCharset = pWord->nCharset;
178 word.fWidth = m_pVT->GetWordWidth(*pWord);
179 word.ptWord = m_pVT->InToOut(
180 CFX_FloatPoint(pWord->fWordX + pSection->m_SecInfo.rcSection.left,
181 pWord->fWordY + pSection->m_SecInfo.rcSection.top));
182 word.fAscent = m_pVT->GetWordAscent(*pWord);
183 word.fDescent = m_pVT->GetWordDescent(*pWord);
184 if (pWord->pWordProps)
185 word.WordProps = *pWord->pWordProps;
186
187 word.nFontIndex = m_pVT->GetWordFontIndex(*pWord);
188 word.fFontSize = m_pVT->GetWordFontSize(*pWord);
189 return TRUE;
189 } 190 }
190 191
191 FX_BOOL CPDF_VariableText::Iterator::SetWord(const CPVT_Word& word) { 192 FX_BOOL CPDF_VariableText::Iterator::SetWord(const CPVT_Word& word) {
192 if (CSection* pSection = m_pVT->m_SectionArray.GetAt(m_CurPos.nSecIndex)) { 193 CSection* pSection = m_pVT->m_SectionArray.GetAt(m_CurPos.nSecIndex);
193 if (CPVT_WordInfo* pWord = 194 if (!pSection)
194 pSection->m_WordArray.GetAt(m_CurPos.nWordIndex)) { 195 return FALSE;
195 if (pWord->pWordProps) 196
196 *pWord->pWordProps = word.WordProps; 197 const CPVT_WordInfo* pWord = pSection->GetWord(m_CurPos.nWordIndex);
197 return TRUE; 198 if (!pWord)
198 } 199 return FALSE;
199 } 200
200 return FALSE; 201 if (pWord->pWordProps)
202 *pWord->pWordProps = word.WordProps;
203 return TRUE;
201 } 204 }
202 205
203 FX_BOOL CPDF_VariableText::Iterator::GetLine(CPVT_Line& line) const { 206 FX_BOOL CPDF_VariableText::Iterator::GetLine(CPVT_Line& line) const {
204 ASSERT(m_pVT); 207 ASSERT(m_pVT);
205 line.lineplace = CPVT_WordPlace(m_CurPos.nSecIndex, m_CurPos.nLineIndex, -1); 208 line.lineplace = CPVT_WordPlace(m_CurPos.nSecIndex, m_CurPos.nLineIndex, -1);
206 if (CSection* pSection = m_pVT->m_SectionArray.GetAt(m_CurPos.nSecIndex)) { 209 if (CSection* pSection = m_pVT->m_SectionArray.GetAt(m_CurPos.nSecIndex)) {
207 if (CLine* pLine = pSection->m_LineArray.GetAt(m_CurPos.nLineIndex)) { 210 if (CLine* pLine = pSection->m_LineArray.GetAt(m_CurPos.nLineIndex)) {
208 line.ptLine = m_pVT->InToOut(CFX_FloatPoint( 211 line.ptLine = m_pVT->InToOut(CFX_FloatPoint(
209 pLine->m_LineInfo.fLineX + pSection->m_SecInfo.rcSection.left, 212 pLine->m_LineInfo.fLineX + pSection->m_SecInfo.rcSection.left,
210 pLine->m_LineInfo.fLineY + pSection->m_SecInfo.rcSection.top)); 213 pLine->m_LineInfo.fLineY + pSection->m_SecInfo.rcSection.top));
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 if (m_nLimitChar > 0 && nTotlaWords >= m_nLimitChar) 328 if (m_nLimitChar > 0 && nTotlaWords >= m_nLimitChar)
326 return place; 329 return place;
327 if (m_nCharArray > 0 && nTotlaWords >= m_nCharArray) 330 if (m_nCharArray > 0 && nTotlaWords >= m_nCharArray)
328 return place; 331 return place;
329 if (!m_bMultiLine) 332 if (!m_bMultiLine)
330 return place; 333 return place;
331 334
332 CPVT_WordPlace wordplace = place; 335 CPVT_WordPlace wordplace = place;
333 UpdateWordPlace(wordplace); 336 UpdateWordPlace(wordplace);
334 CPVT_WordPlace newplace = place; 337 CPVT_WordPlace newplace = place;
335 if (CSection* pSection = m_SectionArray.GetAt(wordplace.nSecIndex)) { 338 CSection* pSection = m_SectionArray.GetAt(wordplace.nSecIndex);
336 CPVT_WordPlace NewPlace(wordplace.nSecIndex + 1, 0, -1); 339 if (!pSection)
337 CPVT_SectionInfo secinfo; 340 return newplace;
338 if (m_bRichText) { 341
339 if (pSecProps) 342 CPVT_WordPlace NewPlace(wordplace.nSecIndex + 1, 0, -1);
340 secinfo.pSecProps = new CPVT_SecProps(*pSecProps); 343 CPVT_SectionInfo secinfo;
341 if (pWordProps) 344 if (m_bRichText) {
342 secinfo.pWordProps = new CPVT_WordProps(*pWordProps); 345 if (pSecProps)
346 secinfo.pSecProps = new CPVT_SecProps(*pSecProps);
347 if (pWordProps)
348 secinfo.pWordProps = new CPVT_WordProps(*pWordProps);
349 }
350 AddSection(NewPlace, secinfo);
351 newplace = NewPlace;
352 if (CSection* pNewSection = m_SectionArray.GetAt(NewPlace.nSecIndex)) {
353 for (int32_t i = wordplace.nWordIndex + 1; i < pSection->GetNumberOfWords();
354 ++i) {
355 const CPVT_WordInfo* pWord = pSection->GetWord(i);
356 NewPlace.nWordIndex++;
357 pNewSection->AddWord(NewPlace, *pWord);
343 } 358 }
344 AddSection(NewPlace, secinfo);
345 newplace = NewPlace;
346 if (CSection* pNewSection = m_SectionArray.GetAt(NewPlace.nSecIndex)) {
347 for (int32_t w = wordplace.nWordIndex + 1,
348 sz = pSection->m_WordArray.GetSize();
349 w < sz; w++) {
350 if (CPVT_WordInfo* pWord = pSection->m_WordArray.GetAt(w)) {
351 NewPlace.nWordIndex++;
352 pNewSection->AddWord(NewPlace, *pWord);
353 }
354 }
355 }
356 ClearSectionRightWords(wordplace);
357 } 359 }
360 ClearSectionRightWords(wordplace);
358 return newplace; 361 return newplace;
359 } 362 }
360 363
361 CPVT_WordPlace CPDF_VariableText::InsertText(const CPVT_WordPlace& place, 364 CPVT_WordPlace CPDF_VariableText::InsertText(const CPVT_WordPlace& place,
362 const FX_WCHAR* text, 365 const FX_WCHAR* text,
363 int32_t charset, 366 int32_t charset,
364 const CPVT_SecProps* pSecProps, 367 const CPVT_SecProps* pSecProps,
365 const CPVT_WordProps* pProps) { 368 const CPVT_WordProps* pProps) {
366 CFX_WideString swText = text; 369 CFX_WideString swText = text;
367 CPVT_WordPlace wp = place; 370 CPVT_WordPlace wp = place;
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
492 int32_t CPDF_VariableText::WordPlaceToWordIndex( 495 int32_t CPDF_VariableText::WordPlaceToWordIndex(
493 const CPVT_WordPlace& place) const { 496 const CPVT_WordPlace& place) const {
494 CPVT_WordPlace newplace = place; 497 CPVT_WordPlace newplace = place;
495 UpdateWordPlace(newplace); 498 UpdateWordPlace(newplace);
496 int32_t nIndex = 0; 499 int32_t nIndex = 0;
497 int32_t i = 0; 500 int32_t i = 0;
498 int32_t sz = 0; 501 int32_t sz = 0;
499 for (i = 0, sz = m_SectionArray.GetSize(); i < sz && i < newplace.nSecIndex; 502 for (i = 0, sz = m_SectionArray.GetSize(); i < sz && i < newplace.nSecIndex;
500 i++) { 503 i++) {
501 if (CSection* pSection = m_SectionArray.GetAt(i)) { 504 if (CSection* pSection = m_SectionArray.GetAt(i)) {
502 nIndex += pSection->m_WordArray.GetSize(); 505 nIndex += pSection->GetNumberOfWords();
503 if (i != m_SectionArray.GetSize() - 1) 506 if (i != m_SectionArray.GetSize() - 1)
504 nIndex += kReturnLength; 507 nIndex += kReturnLength;
505 } 508 }
506 } 509 }
507 if (i >= 0 && i < m_SectionArray.GetSize()) 510 if (i >= 0 && i < m_SectionArray.GetSize())
508 nIndex += newplace.nWordIndex + kReturnLength; 511 nIndex += newplace.nWordIndex + kReturnLength;
509 return nIndex; 512 return nIndex;
510 } 513 }
511 514
512 CPVT_WordPlace CPDF_VariableText::WordIndexToWordPlace(int32_t index) const { 515 CPVT_WordPlace CPDF_VariableText::WordIndexToWordPlace(int32_t index) const {
513 CPVT_WordPlace place = GetBeginWordPlace(); 516 CPVT_WordPlace place = GetBeginWordPlace();
514 int32_t nOldIndex = 0, nIndex = 0; 517 int32_t nOldIndex = 0, nIndex = 0;
515 FX_BOOL bFind = FALSE; 518 FX_BOOL bFind = FALSE;
516 for (int32_t i = 0, sz = m_SectionArray.GetSize(); i < sz; i++) { 519 for (int32_t i = 0, sz = m_SectionArray.GetSize(); i < sz; i++) {
517 if (CSection* pSection = m_SectionArray.GetAt(i)) { 520 if (CSection* pSection = m_SectionArray.GetAt(i)) {
518 nIndex += pSection->m_WordArray.GetSize(); 521 nIndex += pSection->GetNumberOfWords();
519 if (nIndex == index) { 522 if (nIndex == index) {
520 place = pSection->GetEndWordPlace(); 523 place = pSection->GetEndWordPlace();
521 bFind = TRUE; 524 bFind = TRUE;
522 break; 525 break;
523 } else if (nIndex > index) { 526 }
527 if (nIndex > index) {
524 place.nSecIndex = i; 528 place.nSecIndex = i;
525 place.nWordIndex = index - nOldIndex - 1; 529 place.nWordIndex = index - nOldIndex - 1;
526 pSection->UpdateWordPlace(place); 530 pSection->UpdateWordPlace(place);
527 bFind = TRUE; 531 bFind = TRUE;
528 break; 532 break;
529 } 533 }
530 if (i != m_SectionArray.GetSize() - 1) 534 if (i != m_SectionArray.GetSize() - 1)
531 nIndex += kReturnLength; 535 nIndex += kReturnLength;
532 nOldIndex = nIndex; 536 nOldIndex = nIndex;
533 } 537 }
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
689 const CPVT_WordPlace& place) const { 693 const CPVT_WordPlace& place) const {
690 if (CSection* pSection = m_SectionArray.GetAt(place.nSecIndex)) 694 if (CSection* pSection = m_SectionArray.GetAt(place.nSecIndex))
691 return pSection->GetEndWordPlace(); 695 return pSection->GetEndWordPlace();
692 return place; 696 return place;
693 } 697 }
694 698
695 int32_t CPDF_VariableText::GetTotalWords() const { 699 int32_t CPDF_VariableText::GetTotalWords() const {
696 int32_t nTotal = 0; 700 int32_t nTotal = 0;
697 for (int32_t i = 0, sz = m_SectionArray.GetSize(); i < sz; i++) { 701 for (int32_t i = 0, sz = m_SectionArray.GetSize(); i < sz; i++) {
698 if (CSection* pSection = m_SectionArray.GetAt(i)) 702 if (CSection* pSection = m_SectionArray.GetAt(i))
699 nTotal += (pSection->m_WordArray.GetSize() + kReturnLength); 703 nTotal += (pSection->GetNumberOfWords() + kReturnLength);
700 } 704 }
701 705
702 return nTotal - kReturnLength; 706 return nTotal - kReturnLength;
703 } 707 }
704 708
705 void CPDF_VariableText::ResetSectionArray() { 709 void CPDF_VariableText::ResetSectionArray() {
706 for (int32_t s = 0, sz = m_SectionArray.GetSize(); s < sz; s++) 710 for (int32_t s = 0, sz = m_SectionArray.GetSize(); s < sz; s++)
707 delete m_SectionArray.GetAt(s); 711 delete m_SectionArray.GetAt(s);
708 712
709 m_SectionArray.RemoveAll(); 713 m_SectionArray.RemoveAll();
(...skipping 12 matching lines...) Expand all
722 if (nSecIndex == m_SectionArray.GetSize()) 726 if (nSecIndex == m_SectionArray.GetSize())
723 m_SectionArray.Add(pSection); 727 m_SectionArray.Add(pSection);
724 else 728 else
725 m_SectionArray.InsertAt(nSecIndex, pSection); 729 m_SectionArray.InsertAt(nSecIndex, pSection);
726 730
727 return place; 731 return place;
728 } 732 }
729 733
730 CPVT_WordPlace CPDF_VariableText::AddLine(const CPVT_WordPlace& place, 734 CPVT_WordPlace CPDF_VariableText::AddLine(const CPVT_WordPlace& place,
731 const CPVT_LineInfo& lineinfo) { 735 const CPVT_LineInfo& lineinfo) {
732 if (m_SectionArray.IsEmpty()) 736 if (m_SectionArray.GetSize() == 0)
733 return place; 737 return place;
734 if (CSection* pSection = m_SectionArray.GetAt(place.nSecIndex)) 738 if (CSection* pSection = m_SectionArray.GetAt(place.nSecIndex))
735 return pSection->AddLine(lineinfo); 739 return pSection->AddLine(lineinfo);
736 return place; 740 return place;
737 } 741 }
738 742
739 CPVT_WordPlace CPDF_VariableText::AddWord(const CPVT_WordPlace& place, 743 CPVT_WordPlace CPDF_VariableText::AddWord(const CPVT_WordPlace& place,
740 const CPVT_WordInfo& wordinfo) { 744 const CPVT_WordInfo& wordinfo) {
741 if (m_SectionArray.GetSize() <= 0) { 745 if (m_SectionArray.GetSize() <= 0)
742 return place; 746 return place;
743 } 747
744 CPVT_WordPlace newplace = place; 748 CPVT_WordPlace newplace = place;
745 newplace.nSecIndex = 749 newplace.nSecIndex =
746 std::max(std::min(newplace.nSecIndex, m_SectionArray.GetSize() - 1), 0); 750 std::max(std::min(newplace.nSecIndex, m_SectionArray.GetSize() - 1), 0);
747 if (CSection* pSection = m_SectionArray.GetAt(newplace.nSecIndex)) 751 if (CSection* pSection = m_SectionArray.GetAt(newplace.nSecIndex))
748 return pSection->AddWord(newplace, wordinfo); 752 return pSection->AddWord(newplace, wordinfo);
749 return place; 753 return place;
750 } 754 }
751 755
752 FX_BOOL CPDF_VariableText::GetWordInfo(const CPVT_WordPlace& place, 756 FX_BOOL CPDF_VariableText::GetWordInfo(const CPVT_WordPlace& place,
753 CPVT_WordInfo& wordinfo) { 757 CPVT_WordInfo& wordinfo) {
754 if (CSection* pSection = m_SectionArray.GetAt(place.nSecIndex)) { 758 CSection* pSection = m_SectionArray.GetAt(place.nSecIndex);
755 if (CPVT_WordInfo* pWord = pSection->m_WordArray.GetAt(place.nWordIndex)) { 759 if (!pSection)
756 wordinfo = *pWord; 760 return FALSE;
757 return TRUE; 761
758 } 762 const CPVT_WordInfo* pWord = pSection->GetWord(place.nWordIndex);
759 } 763 if (!pWord)
760 return FALSE; 764 return FALSE;
765
766 wordinfo = *pWord;
767 return TRUE;
761 } 768 }
762 769
763 FX_BOOL CPDF_VariableText::SetWordInfo(const CPVT_WordPlace& place, 770 FX_BOOL CPDF_VariableText::SetWordInfo(const CPVT_WordPlace& place,
764 const CPVT_WordInfo& wordinfo) { 771 const CPVT_WordInfo& wordinfo) {
765 if (CSection* pSection = m_SectionArray.GetAt(place.nSecIndex)) { 772 CSection* pSection = m_SectionArray.GetAt(place.nSecIndex);
766 if (CPVT_WordInfo* pWord = pSection->m_WordArray.GetAt(place.nWordIndex)) { 773 if (!pSection)
767 *pWord = wordinfo; 774 return FALSE;
768 return TRUE; 775
769 } 776 CPVT_WordInfo* pWord = pSection->GetWord(place.nWordIndex);
770 } 777 if (!pWord)
771 return FALSE; 778 return FALSE;
779
780 *pWord = wordinfo;
781 return TRUE;
772 } 782 }
773 783
774 FX_BOOL CPDF_VariableText::GetLineInfo(const CPVT_WordPlace& place, 784 FX_BOOL CPDF_VariableText::GetLineInfo(const CPVT_WordPlace& place,
775 CPVT_LineInfo& lineinfo) { 785 CPVT_LineInfo& lineinfo) {
776 if (CSection* pSection = m_SectionArray.GetAt(place.nSecIndex)) { 786 if (CSection* pSection = m_SectionArray.GetAt(place.nSecIndex)) {
777 if (CLine* pLine = pSection->m_LineArray.GetAt(place.nLineIndex)) { 787 if (CLine* pLine = pSection->m_LineArray.GetAt(place.nLineIndex)) {
778 lineinfo = pLine->m_LineInfo; 788 lineinfo = pLine->m_LineInfo;
779 return TRUE; 789 return TRUE;
780 } 790 }
781 } 791 }
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
899 : m_fCharSpace; 909 : m_fCharSpace;
900 } 910 }
901 911
902 int32_t CPDF_VariableText::GetHorzScale(const CPVT_WordInfo& WordInfo) { 912 int32_t CPDF_VariableText::GetHorzScale(const CPVT_WordInfo& WordInfo) {
903 return m_bRichText && WordInfo.pWordProps ? WordInfo.pWordProps->nHorzScale 913 return m_bRichText && WordInfo.pWordProps ? WordInfo.pWordProps->nHorzScale
904 : m_nHorzScale; 914 : m_nHorzScale;
905 } 915 }
906 916
907 void CPDF_VariableText::ClearSectionRightWords(const CPVT_WordPlace& place) { 917 void CPDF_VariableText::ClearSectionRightWords(const CPVT_WordPlace& place) {
908 CPVT_WordPlace wordplace = AdjustLineHeader(place, TRUE); 918 CPVT_WordPlace wordplace = AdjustLineHeader(place, TRUE);
909 if (CSection* pSection = m_SectionArray.GetAt(place.nSecIndex)) { 919 CSection* pSection = m_SectionArray.GetAt(place.nSecIndex);
910 for (int32_t w = pSection->m_WordArray.GetSize() - 1; 920 if (pSection)
911 w > wordplace.nWordIndex; w--) { 921 pSection->ClearRightWords(wordplace.nWordIndex);
dsinclair 2016/05/16 14:12:27 ClearRightWords is ... confusing. ClearWordsFrom m
912 delete pSection->m_WordArray.GetAt(w);
913 pSection->m_WordArray.RemoveAt(w);
914 }
915 }
916 } 922 }
917 923
918 CPVT_WordPlace CPDF_VariableText::AdjustLineHeader(const CPVT_WordPlace& place, 924 CPVT_WordPlace CPDF_VariableText::AdjustLineHeader(const CPVT_WordPlace& place,
919 FX_BOOL bPrevOrNext) const { 925 FX_BOOL bPrevOrNext) const {
920 if (place.nWordIndex < 0 && place.nLineIndex > 0) 926 if (place.nWordIndex < 0 && place.nLineIndex > 0)
921 return bPrevOrNext ? GetPrevWordPlace(place) : GetNextWordPlace(place); 927 return bPrevOrNext ? GetPrevWordPlace(place) : GetNextWordPlace(place);
922 return place; 928 return place;
923 } 929 }
924 930
925 FX_BOOL CPDF_VariableText::ClearEmptySection(const CPVT_WordPlace& place) { 931 FX_BOOL CPDF_VariableText::ClearEmptySection(const CPVT_WordPlace& place) {
926 if (place.nSecIndex == 0 && m_SectionArray.GetSize() == 1) 932 if (place.nSecIndex == 0 && m_SectionArray.GetSize() == 1)
927 return FALSE; 933 return FALSE;
928 if (CSection* pSection = m_SectionArray.GetAt(place.nSecIndex)) { 934 if (CSection* pSection = m_SectionArray.GetAt(place.nSecIndex)) {
929 if (pSection->m_WordArray.GetSize() == 0) { 935 if (pSection->IsWordArrayEmpty()) {
dsinclair 2016/05/16 14:12:27 Can this use GetSize() == 0? We got rid of IsEmpty
930 delete pSection; 936 delete pSection;
931 m_SectionArray.RemoveAt(place.nSecIndex); 937 m_SectionArray.RemoveAt(place.nSecIndex);
932 return TRUE; 938 return TRUE;
933 } 939 }
934 } 940 }
935 return FALSE; 941 return FALSE;
936 } 942 }
937 943
938 void CPDF_VariableText::ClearEmptySections(const CPVT_WordRange& PlaceRange) { 944 void CPDF_VariableText::ClearEmptySections(const CPVT_WordRange& PlaceRange) {
939 CPVT_WordPlace wordplace; 945 CPVT_WordPlace wordplace;
940 for (int32_t s = PlaceRange.EndPos.nSecIndex; 946 for (int32_t s = PlaceRange.EndPos.nSecIndex;
941 s > PlaceRange.BeginPos.nSecIndex; s--) { 947 s > PlaceRange.BeginPos.nSecIndex; s--) {
942 wordplace.nSecIndex = s; 948 wordplace.nSecIndex = s;
943 ClearEmptySection(wordplace); 949 ClearEmptySection(wordplace);
944 } 950 }
945 } 951 }
946 952
947 void CPDF_VariableText::LinkLatterSection(const CPVT_WordPlace& place) { 953 void CPDF_VariableText::LinkLatterSection(const CPVT_WordPlace& place) {
948 CPVT_WordPlace oldplace = AdjustLineHeader(place, TRUE); 954 CPVT_WordPlace oldplace = AdjustLineHeader(place, TRUE);
949 if (CSection* pNextSection = m_SectionArray.GetAt(place.nSecIndex + 1)) { 955 if (CSection* pNextSection = m_SectionArray.GetAt(place.nSecIndex + 1)) {
950 if (CSection* pSection = m_SectionArray.GetAt(oldplace.nSecIndex)) { 956 if (CSection* pSection = m_SectionArray.GetAt(oldplace.nSecIndex)) {
951 for (int32_t w = 0, sz = pNextSection->m_WordArray.GetSize(); w < sz; 957 for (int32_t i = 0; i < pNextSection->GetNumberOfWords(); ++i) {
952 w++) { 958 const CPVT_WordInfo* pWord = pNextSection->GetWord(i);
dsinclair 2016/05/16 14:12:27 It's no longer possible for pWord to be nullptr?
953 if (CPVT_WordInfo* pWord = pNextSection->m_WordArray.GetAt(w)) { 959 oldplace.nWordIndex++;
954 oldplace.nWordIndex++; 960 pSection->AddWord(oldplace, *pWord);
955 pSection->AddWord(oldplace, *pWord);
956 }
957 } 961 }
958 } 962 }
959 delete pNextSection; 963 delete pNextSection;
960 m_SectionArray.RemoveAt(place.nSecIndex + 1); 964 m_SectionArray.RemoveAt(place.nSecIndex + 1);
961 } 965 }
962 } 966 }
963 967
964 void CPDF_VariableText::ClearWords(const CPVT_WordRange& PlaceRange) { 968 void CPDF_VariableText::ClearWords(const CPVT_WordRange& PlaceRange) {
965 CPVT_WordRange NewRange; 969 CPVT_WordRange NewRange;
966 NewRange.BeginPos = AdjustLineHeader(PlaceRange.BeginPos, TRUE); 970 NewRange.BeginPos = AdjustLineHeader(PlaceRange.BeginPos, TRUE);
967 NewRange.EndPos = AdjustLineHeader(PlaceRange.EndPos, TRUE); 971 NewRange.EndPos = AdjustLineHeader(PlaceRange.EndPos, TRUE);
968 for (int32_t s = NewRange.EndPos.nSecIndex; s >= NewRange.BeginPos.nSecIndex; 972 for (int32_t s = NewRange.EndPos.nSecIndex; s >= NewRange.BeginPos.nSecIndex;
969 s--) { 973 s--) {
970 if (CSection* pSection = m_SectionArray.GetAt(s)) 974 if (CSection* pSection = m_SectionArray.GetAt(s))
971 pSection->ClearWords(NewRange); 975 pSection->ClearWords(NewRange);
972 } 976 }
973 } 977 }
974 978
975 CPVT_WordPlace CPDF_VariableText::ClearLeftWord(const CPVT_WordPlace& place) { 979 CPVT_WordPlace CPDF_VariableText::ClearLeftWord(const CPVT_WordPlace& place) {
976 if (CSection* pSection = m_SectionArray.GetAt(place.nSecIndex)) { 980 if (CSection* pSection = m_SectionArray.GetAt(place.nSecIndex)) {
977 CPVT_WordPlace leftplace = GetPrevWordPlace(place); 981 CPVT_WordPlace leftplace = GetPrevWordPlace(place);
978 if (leftplace != place) { 982 if (leftplace != place) {
979 if (leftplace.nSecIndex != place.nSecIndex) { 983 if (leftplace.nSecIndex != place.nSecIndex) {
980 if (pSection->m_WordArray.GetSize() == 0) 984 if (pSection->IsWordArrayEmpty())
981 ClearEmptySection(place); 985 ClearEmptySection(place);
982 else 986 else
983 LinkLatterSection(leftplace); 987 LinkLatterSection(leftplace);
984 } else { 988 } else {
985 pSection->ClearWord(place); 989 pSection->ClearWord(place);
986 } 990 }
987 } 991 }
988 return leftplace; 992 return leftplace;
989 } 993 }
990 return place; 994 return place;
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
1046 continue; 1050 continue;
1047 } else { 1051 } else {
1048 nLeft = nMid + 1; 1052 nLeft = nMid + 1;
1049 nMid = (nLeft + nRight) / 2; 1053 nMid = (nLeft + nRight) / 2;
1050 continue; 1054 continue;
1051 } 1055 }
1052 } 1056 }
1053 return (FX_FLOAT)gFontSizeSteps[nMid]; 1057 return (FX_FLOAT)gFontSizeSteps[nMid];
1054 } 1058 }
1055 1059
1056 FX_BOOL CPDF_VariableText::IsBigger(FX_FLOAT fFontSize) { 1060 bool CPDF_VariableText::IsBigger(FX_FLOAT fFontSize) const {
1057 FX_BOOL bBigger = FALSE; 1061 CFX_PointF szTotal;
1058 CPVT_Size szTotal;
1059 for (int32_t s = 0, sz = m_SectionArray.GetSize(); s < sz; s++) { 1062 for (int32_t s = 0, sz = m_SectionArray.GetSize(); s < sz; s++) {
1060 if (CSection* pSection = m_SectionArray.GetAt(s)) { 1063 if (CSection* pSection = m_SectionArray.GetAt(s)) {
1061 CPVT_Size size = pSection->GetSectionSize(fFontSize); 1064 CFX_PointF size = pSection->GetSectionSize(fFontSize);
1062 szTotal.x = std::max(size.x, szTotal.x); 1065 szTotal.x = std::max(size.x, szTotal.x);
1063 szTotal.y += size.y; 1066 szTotal.y += size.y;
1064 if (IsFloatBigger(szTotal.x, GetPlateWidth()) || 1067 if (IsFloatBigger(szTotal.x, GetPlateWidth()) ||
1065 IsFloatBigger(szTotal.y, GetPlateHeight())) { 1068 IsFloatBigger(szTotal.y, GetPlateHeight())) {
1066 bBigger = TRUE; 1069 return true;
1067 break;
1068 } 1070 }
1069 } 1071 }
1070 } 1072 }
1071 return bBigger; 1073 return false;
1072 } 1074 }
1073 1075
1074 CPVT_FloatRect CPDF_VariableText::RearrangeSections( 1076 CPVT_FloatRect CPDF_VariableText::RearrangeSections(
1075 const CPVT_WordRange& PlaceRange) { 1077 const CPVT_WordRange& PlaceRange) {
1076 CPVT_WordPlace place; 1078 CPVT_WordPlace place;
1077 FX_FLOAT fPosY = 0; 1079 FX_FLOAT fPosY = 0;
1078 FX_FLOAT fOldHeight; 1080 FX_FLOAT fOldHeight;
1079 int32_t nSSecIndex = PlaceRange.BeginPos.nSecIndex; 1081 int32_t nSSecIndex = PlaceRange.BeginPos.nSecIndex;
1080 int32_t nESecIndex = PlaceRange.EndPos.nSecIndex; 1082 int32_t nESecIndex = PlaceRange.EndPos.nSecIndex;
1081 CPVT_FloatRect rcRet; 1083 CPVT_FloatRect rcRet;
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
1152 m_pVTIterator = new CPDF_VariableText::Iterator(this); 1154 m_pVTIterator = new CPDF_VariableText::Iterator(this);
1153 return m_pVTIterator; 1155 return m_pVTIterator;
1154 } 1156 }
1155 1157
1156 CPDF_VariableText::Provider* CPDF_VariableText::SetProvider( 1158 CPDF_VariableText::Provider* CPDF_VariableText::SetProvider(
1157 CPDF_VariableText::Provider* pProvider) { 1159 CPDF_VariableText::Provider* pProvider) {
1158 CPDF_VariableText::Provider* pOld = m_pVTProvider; 1160 CPDF_VariableText::Provider* pOld = m_pVTProvider;
1159 m_pVTProvider = pProvider; 1161 m_pVTProvider = pProvider;
1160 return pOld; 1162 return pOld;
1161 } 1163 }
OLDNEW
« no previous file with comments | « BUILD.gn ('k') | core/fpdfdoc/cpvt_generateap.cpp » ('j') | core/fpdfdoc/csection.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698