| Index: fpdfsdk/src/fxedit/fxet_ap.cpp
|
| diff --git a/fpdfsdk/src/fxedit/fxet_ap.cpp b/fpdfsdk/src/fxedit/fxet_ap.cpp
|
| index 309a98f41e77e69fdac50cde08d2d2f9646c302b..b9900d899b3c63a14a60b7fa2d9b59a38092b2c0 100644
|
| --- a/fpdfsdk/src/fxedit/fxet_ap.cpp
|
| +++ b/fpdfsdk/src/fxedit/fxet_ap.cpp
|
| @@ -8,218 +8,206 @@
|
| #include "../../include/fxedit/fx_edit.h"
|
| #include "../../include/fxedit/fxet_edit.h"
|
|
|
| -CFX_ByteString GetPDFWordString(IFX_Edit_FontMap * pFontMap, int32_t nFontIndex, FX_WORD Word, FX_WORD SubWord)
|
| -{
|
| - ASSERT (pFontMap != NULL);
|
| -
|
| - CFX_ByteString sWord;
|
| -
|
| - if (CPDF_Font * pPDFFont = pFontMap->GetPDFFont(nFontIndex))
|
| - {
|
| - if (SubWord > 0)
|
| - {
|
| - Word = SubWord;
|
| - }
|
| - else
|
| - {
|
| - FX_DWORD dwCharCode = -1;
|
| -
|
| - if (pPDFFont->IsUnicodeCompatible())
|
| - dwCharCode = pPDFFont->CharCodeFromUnicode(Word);
|
| - else
|
| - dwCharCode = pFontMap->CharCodeFromUnicode(nFontIndex, Word);
|
| -
|
| - if (dwCharCode > 0 )
|
| - {
|
| - pPDFFont->AppendChar(sWord, dwCharCode);
|
| - return sWord;
|
| - }
|
| - }
|
| -
|
| - pPDFFont->AppendChar(sWord, Word);
|
| - }
|
| -
|
| - return sWord;
|
| +CFX_ByteString GetPDFWordString(IFX_Edit_FontMap* pFontMap,
|
| + int32_t nFontIndex,
|
| + FX_WORD Word,
|
| + FX_WORD SubWord) {
|
| + ASSERT(pFontMap != NULL);
|
| +
|
| + CFX_ByteString sWord;
|
| +
|
| + if (CPDF_Font* pPDFFont = pFontMap->GetPDFFont(nFontIndex)) {
|
| + if (SubWord > 0) {
|
| + Word = SubWord;
|
| + } else {
|
| + FX_DWORD dwCharCode = -1;
|
| +
|
| + if (pPDFFont->IsUnicodeCompatible())
|
| + dwCharCode = pPDFFont->CharCodeFromUnicode(Word);
|
| + else
|
| + dwCharCode = pFontMap->CharCodeFromUnicode(nFontIndex, Word);
|
| +
|
| + if (dwCharCode > 0) {
|
| + pPDFFont->AppendChar(sWord, dwCharCode);
|
| + return sWord;
|
| + }
|
| + }
|
| +
|
| + pPDFFont->AppendChar(sWord, Word);
|
| + }
|
| +
|
| + return sWord;
|
| }
|
|
|
| -static CFX_ByteString GetWordRenderString(const CFX_ByteString & strWords)
|
| -{
|
| - if (strWords.GetLength() > 0)
|
| - return PDF_EncodeString(strWords) + " Tj\n";
|
| +static CFX_ByteString GetWordRenderString(const CFX_ByteString& strWords) {
|
| + if (strWords.GetLength() > 0)
|
| + return PDF_EncodeString(strWords) + " Tj\n";
|
|
|
| - return "";
|
| + return "";
|
| }
|
|
|
| -static CFX_ByteString GetFontSetString(IFX_Edit_FontMap * pFontMap, int32_t nFontIndex, FX_FLOAT fFontSize)
|
| -{
|
| - CFX_ByteTextBuf sRet;
|
| +static CFX_ByteString GetFontSetString(IFX_Edit_FontMap* pFontMap,
|
| + int32_t nFontIndex,
|
| + FX_FLOAT fFontSize) {
|
| + CFX_ByteTextBuf sRet;
|
|
|
| - if (pFontMap)
|
| - {
|
| - CFX_ByteString sFontAlias = pFontMap->GetPDFFontAlias(nFontIndex);
|
| + if (pFontMap) {
|
| + CFX_ByteString sFontAlias = pFontMap->GetPDFFontAlias(nFontIndex);
|
|
|
| - if (sFontAlias.GetLength() > 0 && fFontSize > 0 )
|
| - sRet << "/" << sFontAlias << " " << fFontSize << " Tf\n";
|
| - }
|
| + if (sFontAlias.GetLength() > 0 && fFontSize > 0)
|
| + sRet << "/" << sFontAlias << " " << fFontSize << " Tf\n";
|
| + }
|
|
|
| - return sRet.GetByteString();
|
| + return sRet.GetByteString();
|
| }
|
|
|
| -CFX_ByteString IFX_Edit::GetEditAppearanceStream(IFX_Edit* pEdit, const CPDF_Point & ptOffset,
|
| - const CPVT_WordRange * pRange /* = NULL*/, FX_BOOL bContinuous/* = TRUE*/, FX_WORD SubWord/* = 0*/)
|
| -{
|
| - CFX_ByteTextBuf sEditStream, sWords;
|
| -
|
| - CPDF_Point ptOld(0.0f,0.0f),ptNew(0.0f,0.0f);
|
| - int32_t nCurFontIndex = -1;
|
| -
|
| - if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator())
|
| - {
|
| - if (pRange)
|
| - pIterator->SetAt(pRange->BeginPos);
|
| - else
|
| - pIterator->SetAt(0);
|
| -
|
| - CPVT_WordPlace oldplace;
|
| -
|
| - while (pIterator->NextWord())
|
| - {
|
| - CPVT_WordPlace place = pIterator->GetAt();
|
| -
|
| - if (pRange && place.WordCmp(pRange->EndPos) > 0) break;
|
| -
|
| - if (bContinuous)
|
| - {
|
| - if (place.LineCmp(oldplace) != 0)
|
| - {
|
| - if (sWords.GetSize() > 0)
|
| - {
|
| - sEditStream << GetWordRenderString(sWords.GetByteString());
|
| - sWords.Clear();
|
| - }
|
| -
|
| - CPVT_Word word;
|
| - if (pIterator->GetWord(word))
|
| - {
|
| - ptNew = CPDF_Point(word.ptWord.x + ptOffset.x, word.ptWord.y + ptOffset.y);
|
| - }
|
| - else
|
| - {
|
| - CPVT_Line line;
|
| - pIterator->GetLine(line);
|
| - ptNew = CPDF_Point(line.ptLine.x + ptOffset.x, line.ptLine.y + ptOffset.y);
|
| - }
|
| -
|
| - if (ptNew.x != ptOld.x || ptNew.y != ptOld.y)
|
| - {
|
| - sEditStream << ptNew.x - ptOld.x << " " << ptNew.y - ptOld.y << " Td\n";
|
| -
|
| - ptOld = ptNew;
|
| - }
|
| - }
|
| -
|
| - CPVT_Word word;
|
| - if (pIterator->GetWord(word))
|
| - {
|
| - if (word.nFontIndex != nCurFontIndex)
|
| - {
|
| - if (sWords.GetSize() > 0)
|
| - {
|
| - sEditStream << GetWordRenderString(sWords.GetByteString());
|
| - sWords.Clear();
|
| - }
|
| - sEditStream << GetFontSetString(pEdit->GetFontMap(),word.nFontIndex,word.fFontSize);
|
| - nCurFontIndex = word.nFontIndex;
|
| - }
|
| -
|
| - sWords << GetPDFWordString(pEdit->GetFontMap(),nCurFontIndex,word.Word,SubWord);
|
| - }
|
| -
|
| - oldplace = place;
|
| - }
|
| - else
|
| - {
|
| - CPVT_Word word;
|
| - if (pIterator->GetWord(word))
|
| - {
|
| - ptNew = CPDF_Point(word.ptWord.x + ptOffset.x, word.ptWord.y + ptOffset.y);
|
| -
|
| - if (ptNew.x != ptOld.x || ptNew.y != ptOld.y)
|
| - {
|
| - sEditStream << ptNew.x - ptOld.x << " " << ptNew.y - ptOld.y << " Td\n";
|
| - ptOld = ptNew;
|
| - }
|
| -
|
| - if (word.nFontIndex != nCurFontIndex)
|
| - {
|
| - sEditStream << GetFontSetString(pEdit->GetFontMap(),word.nFontIndex,word.fFontSize);
|
| - nCurFontIndex = word.nFontIndex;
|
| - }
|
| -
|
| - sEditStream << GetWordRenderString(GetPDFWordString(pEdit->GetFontMap(),nCurFontIndex,word.Word,SubWord));
|
| - }
|
| - }
|
| - }
|
| -
|
| - if (sWords.GetSize() > 0)
|
| - {
|
| - sEditStream << GetWordRenderString(sWords.GetByteString());
|
| - sWords.Clear();
|
| - }
|
| - }
|
| -
|
| - CFX_ByteTextBuf sAppStream;
|
| - if (sEditStream.GetSize() > 0)
|
| - {
|
| - int32_t nHorzScale = pEdit->GetHorzScale();
|
| - if (nHorzScale != 100)
|
| - {
|
| - sAppStream << nHorzScale << " Tz\n";
|
| - }
|
| -
|
| - FX_FLOAT fCharSpace = pEdit->GetCharSpace();
|
| - if (!FX_EDIT_IsFloatZero(fCharSpace))
|
| - {
|
| - sAppStream << fCharSpace << " Tc\n";
|
| - }
|
| -
|
| - sAppStream << sEditStream;
|
| - }
|
| -
|
| - return sAppStream.GetByteString();
|
| +CFX_ByteString IFX_Edit::GetEditAppearanceStream(
|
| + IFX_Edit* pEdit,
|
| + const CPDF_Point& ptOffset,
|
| + const CPVT_WordRange* pRange /* = NULL*/,
|
| + FX_BOOL bContinuous /* = TRUE*/,
|
| + FX_WORD SubWord /* = 0*/) {
|
| + CFX_ByteTextBuf sEditStream, sWords;
|
| +
|
| + CPDF_Point ptOld(0.0f, 0.0f), ptNew(0.0f, 0.0f);
|
| + int32_t nCurFontIndex = -1;
|
| +
|
| + if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) {
|
| + if (pRange)
|
| + pIterator->SetAt(pRange->BeginPos);
|
| + else
|
| + pIterator->SetAt(0);
|
| +
|
| + CPVT_WordPlace oldplace;
|
| +
|
| + while (pIterator->NextWord()) {
|
| + CPVT_WordPlace place = pIterator->GetAt();
|
| +
|
| + if (pRange && place.WordCmp(pRange->EndPos) > 0)
|
| + break;
|
| +
|
| + if (bContinuous) {
|
| + if (place.LineCmp(oldplace) != 0) {
|
| + if (sWords.GetSize() > 0) {
|
| + sEditStream << GetWordRenderString(sWords.GetByteString());
|
| + sWords.Clear();
|
| + }
|
| +
|
| + CPVT_Word word;
|
| + if (pIterator->GetWord(word)) {
|
| + ptNew = CPDF_Point(word.ptWord.x + ptOffset.x,
|
| + word.ptWord.y + ptOffset.y);
|
| + } else {
|
| + CPVT_Line line;
|
| + pIterator->GetLine(line);
|
| + ptNew = CPDF_Point(line.ptLine.x + ptOffset.x,
|
| + line.ptLine.y + ptOffset.y);
|
| + }
|
| +
|
| + if (ptNew.x != ptOld.x || ptNew.y != ptOld.y) {
|
| + sEditStream << ptNew.x - ptOld.x << " " << ptNew.y - ptOld.y
|
| + << " Td\n";
|
| +
|
| + ptOld = ptNew;
|
| + }
|
| + }
|
| +
|
| + CPVT_Word word;
|
| + if (pIterator->GetWord(word)) {
|
| + if (word.nFontIndex != nCurFontIndex) {
|
| + if (sWords.GetSize() > 0) {
|
| + sEditStream << GetWordRenderString(sWords.GetByteString());
|
| + sWords.Clear();
|
| + }
|
| + sEditStream << GetFontSetString(pEdit->GetFontMap(),
|
| + word.nFontIndex, word.fFontSize);
|
| + nCurFontIndex = word.nFontIndex;
|
| + }
|
| +
|
| + sWords << GetPDFWordString(pEdit->GetFontMap(), nCurFontIndex,
|
| + word.Word, SubWord);
|
| + }
|
| +
|
| + oldplace = place;
|
| + } else {
|
| + CPVT_Word word;
|
| + if (pIterator->GetWord(word)) {
|
| + ptNew = CPDF_Point(word.ptWord.x + ptOffset.x,
|
| + word.ptWord.y + ptOffset.y);
|
| +
|
| + if (ptNew.x != ptOld.x || ptNew.y != ptOld.y) {
|
| + sEditStream << ptNew.x - ptOld.x << " " << ptNew.y - ptOld.y
|
| + << " Td\n";
|
| + ptOld = ptNew;
|
| + }
|
| +
|
| + if (word.nFontIndex != nCurFontIndex) {
|
| + sEditStream << GetFontSetString(pEdit->GetFontMap(),
|
| + word.nFontIndex, word.fFontSize);
|
| + nCurFontIndex = word.nFontIndex;
|
| + }
|
| +
|
| + sEditStream << GetWordRenderString(GetPDFWordString(
|
| + pEdit->GetFontMap(), nCurFontIndex, word.Word, SubWord));
|
| + }
|
| + }
|
| + }
|
| +
|
| + if (sWords.GetSize() > 0) {
|
| + sEditStream << GetWordRenderString(sWords.GetByteString());
|
| + sWords.Clear();
|
| + }
|
| + }
|
| +
|
| + CFX_ByteTextBuf sAppStream;
|
| + if (sEditStream.GetSize() > 0) {
|
| + int32_t nHorzScale = pEdit->GetHorzScale();
|
| + if (nHorzScale != 100) {
|
| + sAppStream << nHorzScale << " Tz\n";
|
| + }
|
| +
|
| + FX_FLOAT fCharSpace = pEdit->GetCharSpace();
|
| + if (!FX_EDIT_IsFloatZero(fCharSpace)) {
|
| + sAppStream << fCharSpace << " Tc\n";
|
| + }
|
| +
|
| + sAppStream << sEditStream;
|
| + }
|
| +
|
| + return sAppStream.GetByteString();
|
| }
|
|
|
| -CFX_ByteString IFX_Edit::GetSelectAppearanceStream(IFX_Edit* pEdit, const CPDF_Point & ptOffset,
|
| - const CPVT_WordRange * pRange /*= NULL*/)
|
| -{
|
| - CFX_ByteTextBuf sRet;
|
| -
|
| - if (pRange && pRange->IsExist())
|
| - {
|
| - if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator())
|
| - {
|
| - pIterator->SetAt(pRange->BeginPos);
|
| -
|
| - while (pIterator->NextWord())
|
| - {
|
| - CPVT_WordPlace place = pIterator->GetAt();
|
| -
|
| - if (pRange && place.WordCmp(pRange->EndPos) > 0) break;
|
| -
|
| - CPVT_Word word;
|
| - CPVT_Line line;
|
| - if (pIterator->GetWord(word) && pIterator->GetLine(line))
|
| - {
|
| - //CPDF_Rect rcWordSel = CPDF_Rect(word.ptWord.x,line.ptLine.y + line.fLineDescent,
|
| - // word.ptWord.x+word.fWidth,line.ptLine.y + line.fLineAscent);
|
| -
|
| - sRet << word.ptWord.x + ptOffset.x << " " << line.ptLine.y + line.fLineDescent
|
| - << " " << word.fWidth << " " << line.fLineAscent - line.fLineDescent << " re\nf\n";
|
| - }
|
| - }
|
| - }
|
| - }
|
| -
|
| - return sRet.GetByteString();
|
| +CFX_ByteString IFX_Edit::GetSelectAppearanceStream(
|
| + IFX_Edit* pEdit,
|
| + const CPDF_Point& ptOffset,
|
| + const CPVT_WordRange* pRange /*= NULL*/) {
|
| + CFX_ByteTextBuf sRet;
|
| +
|
| + if (pRange && pRange->IsExist()) {
|
| + if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) {
|
| + pIterator->SetAt(pRange->BeginPos);
|
| +
|
| + while (pIterator->NextWord()) {
|
| + CPVT_WordPlace place = pIterator->GetAt();
|
| +
|
| + if (pRange && place.WordCmp(pRange->EndPos) > 0)
|
| + break;
|
| +
|
| + CPVT_Word word;
|
| + CPVT_Line line;
|
| + if (pIterator->GetWord(word) && pIterator->GetLine(line)) {
|
| + // CPDF_Rect rcWordSel = CPDF_Rect(word.ptWord.x,line.ptLine.y +
|
| + // line.fLineDescent,
|
| + // word.ptWord.x+word.fWidth,line.ptLine.y +
|
| + //line.fLineAscent);
|
| +
|
| + sRet << word.ptWord.x + ptOffset.x << " "
|
| + << line.ptLine.y + line.fLineDescent << " " << word.fWidth << " "
|
| + << line.fLineAscent - line.fLineDescent << " re\nf\n";
|
| + }
|
| + }
|
| + }
|
| + }
|
| +
|
| + return sRet.GetByteString();
|
| }
|
| -
|
|
|