| 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/cpvt_generateap.h" | 7 #include "core/fpdfdoc/cpvt_generateap.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/fpdfapi/fpdf_parser/include/cpdf_dictionary.h" | 10 #include "core/fpdfapi/fpdf_parser/include/cpdf_dictionary.h" |
| (...skipping 489 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 500 // Static. | 500 // Static. |
| 501 CFX_ByteString CPVT_GenerateAP::GenerateEditAP( | 501 CFX_ByteString CPVT_GenerateAP::GenerateEditAP( |
| 502 IPVT_FontMap* pFontMap, | 502 IPVT_FontMap* pFontMap, |
| 503 CPDF_VariableText::Iterator* pIterator, | 503 CPDF_VariableText::Iterator* pIterator, |
| 504 const CFX_FloatPoint& ptOffset, | 504 const CFX_FloatPoint& ptOffset, |
| 505 FX_BOOL bContinuous, | 505 FX_BOOL bContinuous, |
| 506 uint16_t SubWord) { | 506 uint16_t SubWord) { |
| 507 CFX_ByteTextBuf sEditStream, sLineStream, sWords; | 507 CFX_ByteTextBuf sEditStream, sLineStream, sWords; |
| 508 CFX_FloatPoint ptOld(0.0f, 0.0f), ptNew(0.0f, 0.0f); | 508 CFX_FloatPoint ptOld(0.0f, 0.0f), ptNew(0.0f, 0.0f); |
| 509 int32_t nCurFontIndex = -1; | 509 int32_t nCurFontIndex = -1; |
| 510 if (pIterator) { | 510 pIterator->SetAt(0); |
| 511 pIterator->SetAt(0); | |
| 512 | 511 |
| 513 CPVT_WordPlace oldplace; | 512 CPVT_WordPlace oldplace; |
| 514 while (pIterator->NextWord()) { | 513 while (pIterator->NextWord()) { |
| 515 CPVT_WordPlace place = pIterator->GetAt(); | 514 CPVT_WordPlace place = pIterator->GetAt(); |
| 516 if (bContinuous) { | 515 if (bContinuous) { |
| 517 if (place.LineCmp(oldplace) != 0) { | 516 if (place.LineCmp(oldplace) != 0) { |
| 518 if (sWords.GetSize() > 0) { | 517 if (sWords.GetSize() > 0) { |
| 519 sLineStream << GetWordRenderString(sWords.AsStringC()); | 518 sLineStream << GetWordRenderString(sWords.AsStringC()); |
| 520 sEditStream << sLineStream; | 519 sEditStream << sLineStream; |
| 521 sLineStream.Clear(); | 520 sLineStream.Clear(); |
| 522 sWords.Clear(); | 521 sWords.Clear(); |
| 523 } | |
| 524 CPVT_Word word; | |
| 525 if (pIterator->GetWord(word)) { | |
| 526 ptNew = CFX_FloatPoint(word.ptWord.x + ptOffset.x, | |
| 527 word.ptWord.y + ptOffset.y); | |
| 528 } else { | |
| 529 CPVT_Line line; | |
| 530 pIterator->GetLine(line); | |
| 531 ptNew = CFX_FloatPoint(line.ptLine.x + ptOffset.x, | |
| 532 line.ptLine.y + ptOffset.y); | |
| 533 } | |
| 534 if (ptNew.x != ptOld.x || ptNew.y != ptOld.y) { | |
| 535 sLineStream << ptNew.x - ptOld.x << " " << ptNew.y - ptOld.y | |
| 536 << " Td\n"; | |
| 537 ptOld = ptNew; | |
| 538 } | |
| 539 } | 522 } |
| 540 CPVT_Word word; | 523 CPVT_Word word; |
| 541 if (pIterator->GetWord(word)) { | 524 if (pIterator->GetWord(word)) { |
| 542 if (word.nFontIndex != nCurFontIndex) { | |
| 543 if (sWords.GetSize() > 0) { | |
| 544 sLineStream << GetWordRenderString(sWords.AsStringC()); | |
| 545 sWords.Clear(); | |
| 546 } | |
| 547 sLineStream << GetFontSetString(pFontMap, word.nFontIndex, | |
| 548 word.fFontSize); | |
| 549 nCurFontIndex = word.nFontIndex; | |
| 550 } | |
| 551 sWords << GetPDFWordString(pFontMap, nCurFontIndex, word.Word, | |
| 552 SubWord); | |
| 553 } | |
| 554 oldplace = place; | |
| 555 } else { | |
| 556 CPVT_Word word; | |
| 557 if (pIterator->GetWord(word)) { | |
| 558 ptNew = CFX_FloatPoint(word.ptWord.x + ptOffset.x, | 525 ptNew = CFX_FloatPoint(word.ptWord.x + ptOffset.x, |
| 559 word.ptWord.y + ptOffset.y); | 526 word.ptWord.y + ptOffset.y); |
| 560 if (ptNew.x != ptOld.x || ptNew.y != ptOld.y) { | 527 } else { |
| 561 sEditStream << ptNew.x - ptOld.x << " " << ptNew.y - ptOld.y | 528 CPVT_Line line; |
| 562 << " Td\n"; | 529 pIterator->GetLine(line); |
| 563 ptOld = ptNew; | 530 ptNew = CFX_FloatPoint(line.ptLine.x + ptOffset.x, |
| 564 } | 531 line.ptLine.y + ptOffset.y); |
| 565 if (word.nFontIndex != nCurFontIndex) { | 532 } |
| 566 sEditStream << GetFontSetString(pFontMap, word.nFontIndex, | 533 if (ptNew.x != ptOld.x || ptNew.y != ptOld.y) { |
| 567 word.fFontSize); | 534 sLineStream << ptNew.x - ptOld.x << " " << ptNew.y - ptOld.y |
| 568 nCurFontIndex = word.nFontIndex; | 535 << " Td\n"; |
| 569 } | 536 ptOld = ptNew; |
| 570 sEditStream << GetWordRenderString( | |
| 571 GetPDFWordString(pFontMap, nCurFontIndex, word.Word, SubWord)); | |
| 572 } | 537 } |
| 573 } | 538 } |
| 539 CPVT_Word word; |
| 540 if (pIterator->GetWord(word)) { |
| 541 if (word.nFontIndex != nCurFontIndex) { |
| 542 if (sWords.GetSize() > 0) { |
| 543 sLineStream << GetWordRenderString(sWords.AsStringC()); |
| 544 sWords.Clear(); |
| 545 } |
| 546 sLineStream << GetFontSetString(pFontMap, word.nFontIndex, |
| 547 word.fFontSize); |
| 548 nCurFontIndex = word.nFontIndex; |
| 549 } |
| 550 sWords << GetPDFWordString(pFontMap, nCurFontIndex, word.Word, SubWord); |
| 551 } |
| 552 oldplace = place; |
| 553 } else { |
| 554 CPVT_Word word; |
| 555 if (pIterator->GetWord(word)) { |
| 556 ptNew = CFX_FloatPoint(word.ptWord.x + ptOffset.x, |
| 557 word.ptWord.y + ptOffset.y); |
| 558 if (ptNew.x != ptOld.x || ptNew.y != ptOld.y) { |
| 559 sEditStream << ptNew.x - ptOld.x << " " << ptNew.y - ptOld.y |
| 560 << " Td\n"; |
| 561 ptOld = ptNew; |
| 562 } |
| 563 if (word.nFontIndex != nCurFontIndex) { |
| 564 sEditStream << GetFontSetString(pFontMap, word.nFontIndex, |
| 565 word.fFontSize); |
| 566 nCurFontIndex = word.nFontIndex; |
| 567 } |
| 568 sEditStream << GetWordRenderString( |
| 569 GetPDFWordString(pFontMap, nCurFontIndex, word.Word, SubWord)); |
| 570 } |
| 574 } | 571 } |
| 575 if (sWords.GetSize() > 0) { | 572 } |
| 576 sLineStream << GetWordRenderString(sWords.AsStringC()); | 573 if (sWords.GetSize() > 0) { |
| 577 sEditStream << sLineStream; | 574 sLineStream << GetWordRenderString(sWords.AsStringC()); |
| 578 sWords.Clear(); | 575 sEditStream << sLineStream; |
| 579 } | 576 sWords.Clear(); |
| 580 } | 577 } |
| 581 return sEditStream.AsStringC(); | 578 return sEditStream.AsStringC(); |
| 582 } | 579 } |
| 583 | 580 |
| 584 // Static. | 581 // Static. |
| 585 CFX_ByteString CPVT_GenerateAP::GenerateBorderAP( | 582 CFX_ByteString CPVT_GenerateAP::GenerateBorderAP( |
| 586 const CFX_FloatRect& rect, | 583 const CFX_FloatRect& rect, |
| 587 FX_FLOAT fWidth, | 584 FX_FLOAT fWidth, |
| 588 const CPVT_Color& color, | 585 const CPVT_Color& color, |
| 589 const CPVT_Color& crLeftTop, | 586 const CPVT_Color& crLeftTop, |
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 754 int32_t nFontIndex, | 751 int32_t nFontIndex, |
| 755 FX_FLOAT fFontSize) { | 752 FX_FLOAT fFontSize) { |
| 756 CFX_ByteTextBuf sRet; | 753 CFX_ByteTextBuf sRet; |
| 757 if (pFontMap) { | 754 if (pFontMap) { |
| 758 CFX_ByteString sFontAlias = pFontMap->GetPDFFontAlias(nFontIndex); | 755 CFX_ByteString sFontAlias = pFontMap->GetPDFFontAlias(nFontIndex); |
| 759 if (sFontAlias.GetLength() > 0 && fFontSize > 0) | 756 if (sFontAlias.GetLength() > 0 && fFontSize > 0) |
| 760 sRet << "/" << sFontAlias << " " << fFontSize << " Tf\n"; | 757 sRet << "/" << sFontAlias << " " << fFontSize << " Tf\n"; |
| 761 } | 758 } |
| 762 return sRet.AsStringC(); | 759 return sRet.AsStringC(); |
| 763 } | 760 } |
| OLD | NEW |