summaryrefslogtreecommitdiff
path: root/fpdfsdk
diff options
context:
space:
mode:
Diffstat (limited to 'fpdfsdk')
-rw-r--r--fpdfsdk/include/fxedit/fx_edit.h6
-rw-r--r--fpdfsdk/include/pdfwindow/PWL_Edit.h4
-rw-r--r--fpdfsdk/src/fpdf_flatten.cpp20
-rw-r--r--fpdfsdk/src/fpdfeditpage.cpp14
-rw-r--r--fpdfsdk/src/fxedit/fxet_pageobjs.cpp38
-rw-r--r--fpdfsdk/src/javascript/Document.cpp33
-rw-r--r--fpdfsdk/src/pdfwindow/PWL_Edit.cpp8
7 files changed, 51 insertions, 72 deletions
diff --git a/fpdfsdk/include/fxedit/fx_edit.h b/fpdfsdk/include/fxedit/fx_edit.h
index 359f7d85e1..5e1ac0f390 100644
--- a/fpdfsdk/include/fxedit/fx_edit.h
+++ b/fpdfsdk/include/fxedit/fx_edit.h
@@ -458,19 +458,19 @@ class IFX_Edit {
const CPDF_Point& ptOffset,
const CPVT_WordRange* pRange);
static void GeneratePageObjects(
- CPDF_PageObjectHolder* pPageObjects,
+ CPDF_PageObjectHolder* pObjectHolder,
IFX_Edit* pEdit,
const CPDF_Point& ptOffset,
const CPVT_WordRange* pRange,
FX_COLORREF crText,
CFX_ArrayTemplate<CPDF_TextObject*>& ObjArray);
static void GenerateRichPageObjects(
- CPDF_PageObjectHolder* pPageObjects,
+ CPDF_PageObjectHolder* pObjectHolder,
IFX_Edit* pEdit,
const CPDF_Point& ptOffset,
const CPVT_WordRange* pRange,
CFX_ArrayTemplate<CPDF_TextObject*>& ObjArray);
- static void GenerateUnderlineObjects(CPDF_PageObjectHolder* pPageObjects,
+ static void GenerateUnderlineObjects(CPDF_PageObjectHolder* pObjectHolder,
IFX_Edit* pEdit,
const CPDF_Point& ptOffset,
const CPVT_WordRange* pRange,
diff --git a/fpdfsdk/include/pdfwindow/PWL_Edit.h b/fpdfsdk/include/pdfwindow/PWL_Edit.h
index 4b3411b772..73528180d9 100644
--- a/fpdfsdk/include/pdfwindow/PWL_Edit.h
+++ b/fpdfsdk/include/pdfwindow/PWL_Edit.h
@@ -110,10 +110,10 @@ class CPWL_Edit : public CPWL_EditCtrl, public IFX_Edit_OprNotify {
m_pFillerNotify = pNotify;
}
- void GeneratePageObjects(CPDF_PageObjectHolder* pPageObjects,
+ void GeneratePageObjects(CPDF_PageObjectHolder* pObjectHolder,
const CPDF_Point& ptOffset,
CFX_ArrayTemplate<CPDF_TextObject*>& ObjArray);
- void GeneratePageObjects(CPDF_PageObjectHolder* pPageObjects,
+ void GeneratePageObjects(CPDF_PageObjectHolder* pObjectHolder,
const CPDF_Point& ptOffset);
protected:
diff --git a/fpdfsdk/src/fpdf_flatten.cpp b/fpdfsdk/src/fpdf_flatten.cpp
index 36b8319dca..9aee35f760 100644
--- a/fpdfsdk/src/fpdf_flatten.cpp
+++ b/fpdfsdk/src/fpdf_flatten.cpp
@@ -35,17 +35,14 @@ FX_BOOL IsValiableRect(CPDF_Rect rect, CPDF_Rect rcPage) {
return TRUE;
}
-FX_BOOL GetContentsRect(CPDF_Document* pDoc,
- CPDF_Dictionary* pDict,
- CPDF_RectArray* pRectArray) {
- CPDF_Page* pPDFPage = new CPDF_Page;
+void GetContentsRect(CPDF_Document* pDoc,
+ CPDF_Dictionary* pDict,
+ CPDF_RectArray* pRectArray) {
+ std::unique_ptr<CPDF_Page> pPDFPage(new CPDF_Page);
pPDFPage->Load(pDoc, pDict, FALSE);
pPDFPage->ParseContent(nullptr);
- FX_POSITION pos = pPDFPage->GetPageObjectList()->GetHeadPosition();
- while (pos) {
- CPDF_PageObject* pPageObject =
- pPDFPage->GetPageObjectList()->GetNextObject(pos);
+ for (auto& pPageObject : *pPDFPage->GetPageObjectList()) {
if (!pPageObject)
continue;
@@ -54,14 +51,9 @@ FX_BOOL GetContentsRect(CPDF_Document* pDoc,
rc.right = pPageObject->m_Right;
rc.bottom = pPageObject->m_Bottom;
rc.top = pPageObject->m_Top;
-
- if (IsValiableRect(rc, pDict->GetRectBy("MediaBox"))) {
+ if (IsValiableRect(rc, pDict->GetRectBy("MediaBox")))
pRectArray->Add(rc);
- }
}
-
- delete pPDFPage;
- return TRUE;
}
void ParserStream(CPDF_Dictionary* pPageDic,
diff --git a/fpdfsdk/src/fpdfeditpage.cpp b/fpdfsdk/src/fpdfeditpage.cpp
index 6d39cb100f..6c14079131 100644
--- a/fpdfsdk/src/fpdfeditpage.cpp
+++ b/fpdfsdk/src/fpdfeditpage.cpp
@@ -8,6 +8,7 @@
#include "fpdfsdk/include/fsdk_define.h"
#include "public/fpdf_formfill.h"
+#include "third_party/base/stl_util.h"
#ifdef PDF_ENABLE_XFA
#include "fpdfsdk/include/fpdfxfa/fpdfxfa_app.h"
@@ -135,9 +136,10 @@ DLLEXPORT void STDCALL FPDFPage_InsertObject(FPDF_PAGE page,
CPDF_PageObject* pPageObj = (CPDF_PageObject*)page_obj;
if (!pPageObj)
return;
- FX_POSITION LastPersition = pPage->GetPageObjectList()->GetTailPosition();
- pPage->GetPageObjectList()->InsertObject(LastPersition, pPageObj);
+ pPage->GetPageObjectList()->push_back(
+ std::unique_ptr<CPDF_PageObject>(pPageObj));
+
switch (pPageObj->m_Type) {
case FPDF_PAGEOBJ_PATH: {
CPDF_PathObject* pPathObj = (CPDF_PathObject*)pPageObj;
@@ -145,8 +147,6 @@ DLLEXPORT void STDCALL FPDFPage_InsertObject(FPDF_PAGE page,
break;
}
case FPDF_PAGEOBJ_TEXT: {
- // CPDF_PathObject* pPathObj = (CPDF_PathObject*)pPageObj;
- // pPathObj->CalcBoundingBox();
break;
}
case FPDF_PAGEOBJ_IMAGE: {
@@ -177,7 +177,7 @@ DLLEXPORT int STDCALL FPDFPage_CountObject(FPDF_PAGE page) {
"Page")) {
return -1;
}
- return pPage->GetPageObjectList()->GetCount();
+ return pdfium::CollectionSize<int>(*pPage->GetPageObjectList());
}
DLLEXPORT FPDF_PAGEOBJECT STDCALL FPDFPage_GetObject(FPDF_PAGE page,
@@ -186,9 +186,9 @@ DLLEXPORT FPDF_PAGEOBJECT STDCALL FPDFPage_GetObject(FPDF_PAGE page,
if (!pPage || !pPage->m_pFormDict || !pPage->m_pFormDict->KeyExist("Type") ||
pPage->m_pFormDict->GetElement("Type")->GetDirect()->GetString().Compare(
"Page")) {
- return NULL;
+ return nullptr;
}
- return pPage->GetPageObjectList()->GetObjectByIndex(index);
+ return pPage->GetPageObjectList()->GetPageObjectByIndex(index);
}
DLLEXPORT FPDF_BOOL STDCALL FPDFPage_HasTransparency(FPDF_PAGE page) {
diff --git a/fpdfsdk/src/fxedit/fxet_pageobjs.cpp b/fpdfsdk/src/fxedit/fxet_pageobjs.cpp
index d54e4649db..c3bd79759b 100644
--- a/fpdfsdk/src/fxedit/fxet_pageobjs.cpp
+++ b/fpdfsdk/src/fxedit/fxet_pageobjs.cpp
@@ -409,10 +409,10 @@ void IFX_Edit::DrawRichEdit(CFX_RenderDevice* pDevice,
pDevice->RestoreState();
}
-static void AddRectToPageObjects(CPDF_PageObjectHolder* pPageObjs,
+static void AddRectToPageObjects(CPDF_PageObjectHolder* pObjectHolder,
FX_COLORREF crFill,
const CPDF_Rect& rcFill) {
- CPDF_PathObject* pPathObj = new CPDF_PathObject;
+ std::unique_ptr<CPDF_PathObject> pPathObj(new CPDF_PathObject);
CPDF_PathData* pPathData = pPathObj->m_Path.GetModify();
pPathData->AppendRect(rcFill.left, rcFill.bottom, rcFill.right, rcFill.top);
@@ -425,12 +425,11 @@ static void AddRectToPageObjects(CPDF_PageObjectHolder* pPageObjs,
pPathObj->m_FillType = FXFILL_ALTERNATE;
pPathObj->m_bStroke = FALSE;
- pPageObjs->GetPageObjectList()->InsertObject(
- pPageObjs->GetPageObjectList()->GetTailPosition(), pPathObj);
+ pObjectHolder->GetPageObjectList()->push_back(std::move(pPathObj));
}
static CPDF_TextObject* AddTextObjToPageObjects(
- CPDF_PageObjectHolder* pPageObjs,
+ CPDF_PageObjectHolder* pObjectHolder,
FX_COLORREF crText,
CPDF_Font* pFont,
FX_FLOAT fFontSize,
@@ -438,8 +437,7 @@ static CPDF_TextObject* AddTextObjToPageObjects(
int32_t nHorzScale,
const CPDF_Point& point,
const CFX_ByteString& text) {
- CPDF_TextObject* pTxtObj = new CPDF_TextObject;
-
+ std::unique_ptr<CPDF_TextObject> pTxtObj(new CPDF_TextObject);
CPDF_TextStateData* pTextStateData = pTxtObj->m_TextState.GetModify();
pTextStateData->m_pFont = pFont;
pTextStateData->m_FontSize = fFontSize;
@@ -462,14 +460,14 @@ static CPDF_TextObject* AddTextObjToPageObjects(
pTxtObj->SetPosition(point.x, point.y);
pTxtObj->SetText(text);
- pPageObjs->GetPageObjectList()->InsertObject(
- pPageObjs->GetPageObjectList()->GetTailPosition(), pTxtObj);
- return pTxtObj;
+ CPDF_TextObject* pRet = pTxtObj.get();
+ pObjectHolder->GetPageObjectList()->push_back(std::move(pTxtObj));
+ return pRet;
}
void IFX_Edit::GeneratePageObjects(
- CPDF_PageObjectHolder* pPageObjects,
+ CPDF_PageObjectHolder* pObjectHolder,
IFX_Edit* pEdit,
const CPDF_Point& ptOffset,
const CPVT_WordRange* pRange,
@@ -504,7 +502,7 @@ void IFX_Edit::GeneratePageObjects(
nOldFontIndex != word.nFontIndex) {
if (sTextBuf.GetLength() > 0) {
ObjArray.Add(AddTextObjToPageObjects(
- pPageObjects, crText, pFontMap->GetPDFFont(nOldFontIndex),
+ pObjectHolder, crText, pFontMap->GetPDFFont(nOldFontIndex),
fFontSize, 0.0f, 100,
CPDF_Point(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y),
sTextBuf.GetByteString()));
@@ -523,7 +521,7 @@ void IFX_Edit::GeneratePageObjects(
if (sTextBuf.GetLength() > 0) {
ObjArray.Add(AddTextObjToPageObjects(
- pPageObjects, crText, pFontMap->GetPDFFont(nOldFontIndex),
+ pObjectHolder, crText, pFontMap->GetPDFFont(nOldFontIndex),
fFontSize, 0.0f, 100,
CPDF_Point(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y),
sTextBuf.GetByteString()));
@@ -533,7 +531,7 @@ void IFX_Edit::GeneratePageObjects(
}
void IFX_Edit::GenerateRichPageObjects(
- CPDF_PageObjectHolder* pPageObjects,
+ CPDF_PageObjectHolder* pObjectHolder,
IFX_Edit* pEdit,
const CPDF_Point& ptOffset,
const CPVT_WordRange* pRange,
@@ -574,7 +572,7 @@ void IFX_Edit::GenerateRichPageObjects(
crOld != crCurText) {
if (sTextBuf.GetLength() > 0) {
ObjArray.Add(AddTextObjToPageObjects(
- pPageObjects, crOld, pFontMap->GetPDFFont(wp.nFontIndex),
+ pObjectHolder, crOld, pFontMap->GetPDFFont(wp.nFontIndex),
wp.fFontSize, wp.fCharSpace, wp.nHorzScale,
CPDF_Point(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y),
sTextBuf.GetByteString()));
@@ -597,7 +595,7 @@ void IFX_Edit::GenerateRichPageObjects(
rcUnderline.top += ptOffset.y;
rcUnderline.bottom += ptOffset.y;
- AddRectToPageObjects(pPageObjects, crCurText, rcUnderline);
+ AddRectToPageObjects(pObjectHolder, crCurText, rcUnderline);
}
if (word.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) {
@@ -607,7 +605,7 @@ void IFX_Edit::GenerateRichPageObjects(
rcCrossout.top += ptOffset.y;
rcCrossout.bottom += ptOffset.y;
- AddRectToPageObjects(pPageObjects, crCurText, rcCrossout);
+ AddRectToPageObjects(pObjectHolder, crCurText, rcCrossout);
}
oldplace = place;
@@ -616,7 +614,7 @@ void IFX_Edit::GenerateRichPageObjects(
if (sTextBuf.GetLength() > 0) {
ObjArray.Add(AddTextObjToPageObjects(
- pPageObjects, crOld, pFontMap->GetPDFFont(wp.nFontIndex),
+ pObjectHolder, crOld, pFontMap->GetPDFFont(wp.nFontIndex),
wp.fFontSize, wp.fCharSpace, wp.nHorzScale,
CPDF_Point(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y),
sTextBuf.GetByteString()));
@@ -625,7 +623,7 @@ void IFX_Edit::GenerateRichPageObjects(
}
}
-void IFX_Edit::GenerateUnderlineObjects(CPDF_PageObjectHolder* pPageObjects,
+void IFX_Edit::GenerateUnderlineObjects(CPDF_PageObjectHolder* pObjectHolder,
IFX_Edit* pEdit,
const CPDF_Point& ptOffset,
const CPVT_WordRange* pRange,
@@ -651,7 +649,7 @@ void IFX_Edit::GenerateUnderlineObjects(CPDF_PageObjectHolder* pPageObjects,
rcUnderline.right += ptOffset.x;
rcUnderline.top += ptOffset.y;
rcUnderline.bottom += ptOffset.y;
- AddRectToPageObjects(pPageObjects, color, rcUnderline);
+ AddRectToPageObjects(pObjectHolder, color, rcUnderline);
}
}
}
diff --git a/fpdfsdk/src/javascript/Document.cpp b/fpdfsdk/src/javascript/Document.cpp
index c2638d012d..733384a154 100644
--- a/fpdfsdk/src/javascript/Document.cpp
+++ b/fpdfsdk/src/javascript/Document.cpp
@@ -1382,20 +1382,15 @@ FX_BOOL Document::getPageNthWord(IJS_Context* cc,
int nWords = 0;
CFX_WideString swRet;
- FX_POSITION pos = page.GetPageObjectList()->GetHeadPosition();
- while (pos) {
- if (CPDF_PageObject* pPageObj =
- page.GetPageObjectList()->GetNextObject(pos)) {
- if (pPageObj->m_Type == CPDF_PageObject::TEXT) {
- int nObjWords = CountWords((CPDF_TextObject*)pPageObj);
-
- if (nWords + nObjWords >= nWordNo) {
- swRet = GetObjWordStr((CPDF_TextObject*)pPageObj, nWordNo - nWords);
- break;
- }
-
- nWords += nObjWords;
+ for (auto& pPageObj : *page.GetPageObjectList()) {
+ if (pPageObj->m_Type == CPDF_PageObject::TEXT) {
+ CPDF_TextObject* pTextObj = static_cast<CPDF_TextObject*>(pPageObj.get());
+ int nObjWords = CountWords(pTextObj);
+ if (nWords + nObjWords >= nWordNo) {
+ swRet = GetObjWordStr(pTextObj, nWordNo - nWords);
+ break;
}
+ nWords += nObjWords;
}
}
@@ -1442,15 +1437,9 @@ FX_BOOL Document::getPageNumWords(IJS_Context* cc,
page.ParseContent(nullptr);
int nWords = 0;
- FX_POSITION pos = page.GetPageObjectList()->GetHeadPosition();
- while (pos) {
- if (CPDF_PageObject* pPageObj =
- page.GetPageObjectList()->GetNextObject(pos)) {
- if (pPageObj->m_Type == CPDF_PageObject::TEXT) {
- CPDF_TextObject* pTextObj = (CPDF_TextObject*)pPageObj;
- nWords += CountWords(pTextObj);
- }
- }
+ for (auto& pPageObj : *page.GetPageObjectList()) {
+ if (pPageObj->m_Type == CPDF_PageObject::TEXT)
+ nWords += CountWords(static_cast<CPDF_TextObject*>(pPageObj.get()));
}
vRet = nWords;
diff --git a/fpdfsdk/src/pdfwindow/PWL_Edit.cpp b/fpdfsdk/src/pdfwindow/PWL_Edit.cpp
index 4b3886a11d..ce9274aeb9 100644
--- a/fpdfsdk/src/pdfwindow/PWL_Edit.cpp
+++ b/fpdfsdk/src/pdfwindow/PWL_Edit.cpp
@@ -1166,20 +1166,20 @@ CPVT_WordRange CPWL_Edit::GetSameWordsRange(const CPVT_WordPlace& place,
}
void CPWL_Edit::GeneratePageObjects(
- CPDF_PageObjectHolder* pPageObjects,
+ CPDF_PageObjectHolder* pObjectHolder,
const CPDF_Point& ptOffset,
CFX_ArrayTemplate<CPDF_TextObject*>& ObjArray) {
IFX_Edit::GeneratePageObjects(
- pPageObjects, m_pEdit, ptOffset, NULL,
+ pObjectHolder, m_pEdit, ptOffset, NULL,
CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()),
ObjArray);
}
-void CPWL_Edit::GeneratePageObjects(CPDF_PageObjectHolder* pPageObjects,
+void CPWL_Edit::GeneratePageObjects(CPDF_PageObjectHolder* pObjectHolder,
const CPDF_Point& ptOffset) {
CFX_ArrayTemplate<CPDF_TextObject*> ObjArray;
IFX_Edit::GeneratePageObjects(
- pPageObjects, m_pEdit, ptOffset, NULL,
+ pObjectHolder, m_pEdit, ptOffset, NULL,
CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()),
ObjArray);
}