| OLD | NEW |
| 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" | 7 #include "core/fpdfdoc/include/cpdf_variabletext.h" |
| 8 | 8 |
| 9 #include "core/fpdfapi/fpdf_font/include/cpdf_font.h" | 9 #include "core/fpdfapi/fpdf_font/include/cpdf_font.h" |
| 10 #include "core/fpdfdoc/cpvt_wordinfo.h" | 10 #include "core/fpdfdoc/cpvt_wordinfo.h" |
| (...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 328 pNewSection->AddWord(NewPlace, *pWord); | 328 pNewSection->AddWord(NewPlace, *pWord); |
| 329 } | 329 } |
| 330 } | 330 } |
| 331 } | 331 } |
| 332 ClearSectionRightWords(wordplace); | 332 ClearSectionRightWords(wordplace); |
| 333 } | 333 } |
| 334 return newplace; | 334 return newplace; |
| 335 } | 335 } |
| 336 | 336 |
| 337 CPVT_WordPlace CPDF_VariableText::InsertText(const CPVT_WordPlace& place, | 337 CPVT_WordPlace CPDF_VariableText::InsertText(const CPVT_WordPlace& place, |
| 338 const FX_WCHAR* text, | 338 const FX_WCHAR* text) { |
| 339 int32_t charset, | |
| 340 const CPVT_SecProps* pSecProps, | |
| 341 const CPVT_WordProps* pProps) { | |
| 342 CFX_WideString swText = text; | 339 CFX_WideString swText = text; |
| 343 CPVT_WordPlace wp = place; | 340 CPVT_WordPlace wp = place; |
| 344 for (int32_t i = 0, sz = swText.GetLength(); i < sz; i++) { | 341 for (int32_t i = 0, sz = swText.GetLength(); i < sz; i++) { |
| 345 CPVT_WordPlace oldwp = wp; | 342 CPVT_WordPlace oldwp = wp; |
| 346 uint16_t word = swText.GetAt(i); | 343 uint16_t word = swText.GetAt(i); |
| 347 switch (word) { | 344 switch (word) { |
| 348 case 0x0D: | 345 case 0x0D: |
| 349 if (m_bMultiLine) { | 346 if (m_bMultiLine) { |
| 350 if (swText.GetAt(i + 1) == 0x0A) | 347 if (swText.GetAt(i + 1) == 0x0A) |
| 351 i += 1; | 348 i += 1; |
| 352 | 349 |
| 353 wp = InsertSection(wp, pSecProps, pProps); | 350 wp = InsertSection(wp, nullptr, nullptr); |
| 354 } | 351 } |
| 355 break; | 352 break; |
| 356 case 0x0A: | 353 case 0x0A: |
| 357 if (m_bMultiLine) { | 354 if (m_bMultiLine) { |
| 358 if (swText.GetAt(i + 1) == 0x0D) | 355 if (swText.GetAt(i + 1) == 0x0D) |
| 359 i += 1; | 356 i += 1; |
| 360 | 357 |
| 361 wp = InsertSection(wp, pSecProps, pProps); | 358 wp = InsertSection(wp, nullptr, nullptr); |
| 362 } | 359 } |
| 363 break; | 360 break; |
| 364 case 0x09: | 361 case 0x09: |
| 365 word = 0x20; | 362 word = 0x20; |
| 366 default: | 363 default: |
| 367 wp = InsertWord(wp, word, charset, pProps); | 364 wp = InsertWord(wp, word, FXFONT_DEFAULT_CHARSET, nullptr); |
| 368 break; | 365 break; |
| 369 } | 366 } |
| 370 if (wp == oldwp) | 367 if (wp == oldwp) |
| 371 break; | 368 break; |
| 372 } | 369 } |
| 373 return wp; | 370 return wp; |
| 374 } | 371 } |
| 375 | 372 |
| 376 CPVT_WordPlace CPDF_VariableText::DeleteWords( | 373 CPVT_WordPlace CPDF_VariableText::DeleteWords( |
| 377 const CPVT_WordRange& PlaceRange) { | 374 const CPVT_WordRange& PlaceRange) { |
| (...skipping 11 matching lines...) Expand all Loading... |
| 389 } | 386 } |
| 390 | 387 |
| 391 CPVT_WordPlace CPDF_VariableText::DeleteWord(const CPVT_WordPlace& place) { | 388 CPVT_WordPlace CPDF_VariableText::DeleteWord(const CPVT_WordPlace& place) { |
| 392 return ClearRightWord(AdjustLineHeader(place, TRUE)); | 389 return ClearRightWord(AdjustLineHeader(place, TRUE)); |
| 393 } | 390 } |
| 394 | 391 |
| 395 CPVT_WordPlace CPDF_VariableText::BackSpaceWord(const CPVT_WordPlace& place) { | 392 CPVT_WordPlace CPDF_VariableText::BackSpaceWord(const CPVT_WordPlace& place) { |
| 396 return ClearLeftWord(AdjustLineHeader(place, TRUE)); | 393 return ClearLeftWord(AdjustLineHeader(place, TRUE)); |
| 397 } | 394 } |
| 398 | 395 |
| 399 void CPDF_VariableText::SetText(const FX_WCHAR* text, | 396 void CPDF_VariableText::SetText(const FX_WCHAR* text) { |
| 400 int32_t charset, | |
| 401 const CPVT_SecProps* pSecProps, | |
| 402 const CPVT_WordProps* pWordProps) { | |
| 403 DeleteWords(CPVT_WordRange(GetBeginWordPlace(), GetEndWordPlace())); | 397 DeleteWords(CPVT_WordRange(GetBeginWordPlace(), GetEndWordPlace())); |
| 404 CFX_WideString swText = text; | 398 CFX_WideString swText = text; |
| 405 CPVT_WordPlace wp(0, 0, -1); | 399 CPVT_WordPlace wp(0, 0, -1); |
| 406 CPVT_SectionInfo secinfo; | 400 CPVT_SectionInfo secinfo; |
| 407 if (CSection* pSection = m_SectionArray.GetAt(0)) | 401 if (CSection* pSection = m_SectionArray.GetAt(0)) |
| 408 pSection->m_SecInfo = secinfo; | 402 pSection->m_SecInfo = secinfo; |
| 409 | 403 |
| 410 int32_t nCharCount = 0; | 404 int32_t nCharCount = 0; |
| 411 for (int32_t i = 0, sz = swText.GetLength(); i < sz; i++) { | 405 for (int32_t i = 0, sz = swText.GetLength(); i < sz; i++) { |
| 412 if (m_nLimitChar > 0 && nCharCount >= m_nLimitChar) | 406 if (m_nLimitChar > 0 && nCharCount >= m_nLimitChar) |
| (...skipping 21 matching lines...) Expand all Loading... |
| 434 | 428 |
| 435 wp.nSecIndex++; | 429 wp.nSecIndex++; |
| 436 wp.nLineIndex = 0; | 430 wp.nLineIndex = 0; |
| 437 wp.nWordIndex = -1; | 431 wp.nWordIndex = -1; |
| 438 AddSection(wp, secinfo); | 432 AddSection(wp, secinfo); |
| 439 } | 433 } |
| 440 break; | 434 break; |
| 441 case 0x09: | 435 case 0x09: |
| 442 word = 0x20; | 436 word = 0x20; |
| 443 default: | 437 default: |
| 444 wp = InsertWord(wp, word, charset, pWordProps); | 438 wp = InsertWord(wp, word, FXFONT_DEFAULT_CHARSET, nullptr); |
| 445 break; | 439 break; |
| 446 } | 440 } |
| 447 nCharCount++; | 441 nCharCount++; |
| 448 } | 442 } |
| 449 } | 443 } |
| 450 | 444 |
| 451 void CPDF_VariableText::UpdateWordPlace(CPVT_WordPlace& place) const { | 445 void CPDF_VariableText::UpdateWordPlace(CPVT_WordPlace& place) const { |
| 452 if (place.nSecIndex < 0) | 446 if (place.nSecIndex < 0) |
| 453 place = GetBeginWordPlace(); | 447 place = GetBeginWordPlace(); |
| 454 if (place.nSecIndex >= m_SectionArray.GetSize()) | 448 if (place.nSecIndex >= m_SectionArray.GetSize()) |
| (...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 766 } | 760 } |
| 767 | 761 |
| 768 CFX_FloatRect CPDF_VariableText::GetContentRect() const { | 762 CFX_FloatRect CPDF_VariableText::GetContentRect() const { |
| 769 return InToOut(CPVT_FloatRect(CPDF_EditContainer::GetContentRect())); | 763 return InToOut(CPVT_FloatRect(CPDF_EditContainer::GetContentRect())); |
| 770 } | 764 } |
| 771 | 765 |
| 772 const CFX_FloatRect& CPDF_VariableText::GetPlateRect() const { | 766 const CFX_FloatRect& CPDF_VariableText::GetPlateRect() const { |
| 773 return CPDF_EditContainer::GetPlateRect(); | 767 return CPDF_EditContainer::GetPlateRect(); |
| 774 } | 768 } |
| 775 | 769 |
| 776 FX_FLOAT CPDF_VariableText::GetWordFontSize(const CPVT_WordInfo& WordInfo, | 770 FX_FLOAT CPDF_VariableText::GetWordFontSize(const CPVT_WordInfo& WordInfo) { |
| 777 FX_BOOL bFactFontSize) { | |
| 778 return GetFontSize(); | 771 return GetFontSize(); |
| 779 } | 772 } |
| 780 | 773 |
| 781 int32_t CPDF_VariableText::GetWordFontIndex(const CPVT_WordInfo& WordInfo) { | 774 int32_t CPDF_VariableText::GetWordFontIndex(const CPVT_WordInfo& WordInfo) { |
| 782 return WordInfo.nFontIndex; | 775 return WordInfo.nFontIndex; |
| 783 } | 776 } |
| 784 | 777 |
| 785 FX_FLOAT CPDF_VariableText::GetWordWidth(int32_t nFontIndex, | 778 FX_FLOAT CPDF_VariableText::GetWordWidth(int32_t nFontIndex, |
| 786 uint16_t Word, | 779 uint16_t Word, |
| 787 uint16_t SubWord, | 780 uint16_t SubWord, |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 826 FX_FLOAT CPDF_VariableText::GetWordAscent(const CPVT_WordInfo& WordInfo, | 819 FX_FLOAT CPDF_VariableText::GetWordAscent(const CPVT_WordInfo& WordInfo, |
| 827 FX_FLOAT fFontSize) { | 820 FX_FLOAT fFontSize) { |
| 828 return GetFontAscent(GetWordFontIndex(WordInfo), fFontSize); | 821 return GetFontAscent(GetWordFontIndex(WordInfo), fFontSize); |
| 829 } | 822 } |
| 830 | 823 |
| 831 FX_FLOAT CPDF_VariableText::GetWordDescent(const CPVT_WordInfo& WordInfo, | 824 FX_FLOAT CPDF_VariableText::GetWordDescent(const CPVT_WordInfo& WordInfo, |
| 832 FX_FLOAT fFontSize) { | 825 FX_FLOAT fFontSize) { |
| 833 return GetFontDescent(GetWordFontIndex(WordInfo), fFontSize); | 826 return GetFontDescent(GetWordFontIndex(WordInfo), fFontSize); |
| 834 } | 827 } |
| 835 | 828 |
| 836 FX_FLOAT CPDF_VariableText::GetWordAscent(const CPVT_WordInfo& WordInfo, | 829 FX_FLOAT CPDF_VariableText::GetWordAscent(const CPVT_WordInfo& WordInfo) { |
| 837 FX_BOOL bFactFontSize) { | 830 return GetFontAscent(GetWordFontIndex(WordInfo), GetWordFontSize(WordInfo)); |
| 838 return GetFontAscent(GetWordFontIndex(WordInfo), | |
| 839 GetWordFontSize(WordInfo, bFactFontSize)); | |
| 840 } | 831 } |
| 841 | 832 |
| 842 FX_FLOAT CPDF_VariableText::GetWordDescent(const CPVT_WordInfo& WordInfo, | 833 FX_FLOAT CPDF_VariableText::GetWordDescent(const CPVT_WordInfo& WordInfo) { |
| 843 FX_BOOL bFactFontSize) { | 834 return GetFontDescent(GetWordFontIndex(WordInfo), GetWordFontSize(WordInfo)); |
| 844 return GetFontDescent(GetWordFontIndex(WordInfo), | |
| 845 GetWordFontSize(WordInfo, bFactFontSize)); | |
| 846 } | 835 } |
| 847 | 836 |
| 848 FX_FLOAT CPDF_VariableText::GetLineLeading(const CPVT_SectionInfo& SecInfo) { | 837 FX_FLOAT CPDF_VariableText::GetLineLeading(const CPVT_SectionInfo& SecInfo) { |
| 849 return m_fLineLeading; | 838 return m_fLineLeading; |
| 850 } | 839 } |
| 851 | 840 |
| 852 FX_FLOAT CPDF_VariableText::GetLineIndent(const CPVT_SectionInfo& SecInfo) { | 841 FX_FLOAT CPDF_VariableText::GetLineIndent(const CPVT_SectionInfo& SecInfo) { |
| 853 return 0.0f; | 842 return 0.0f; |
| 854 } | 843 } |
| 855 | 844 |
| (...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1107 | 1096 |
| 1108 CPDF_VariableText::Iterator* CPDF_VariableText::GetIterator() { | 1097 CPDF_VariableText::Iterator* CPDF_VariableText::GetIterator() { |
| 1109 if (!m_pVTIterator) | 1098 if (!m_pVTIterator) |
| 1110 m_pVTIterator.reset(new CPDF_VariableText::Iterator(this)); | 1099 m_pVTIterator.reset(new CPDF_VariableText::Iterator(this)); |
| 1111 return m_pVTIterator.get(); | 1100 return m_pVTIterator.get(); |
| 1112 } | 1101 } |
| 1113 | 1102 |
| 1114 void CPDF_VariableText::SetProvider(CPDF_VariableText::Provider* pProvider) { | 1103 void CPDF_VariableText::SetProvider(CPDF_VariableText::Provider* pProvider) { |
| 1115 m_pVTProvider = pProvider; | 1104 m_pVTProvider = pProvider; |
| 1116 } | 1105 } |
| OLD | NEW |