From fb72726e51bfd0c7bfc61c9b354e2b60f46adac5 Mon Sep 17 00:00:00 2001 From: Artem Strygin Date: Mon, 11 Jun 2018 18:19:57 +0000 Subject: Implement CPDF_Object::MakeReference method. Change-Id: I153747ef587a184eaef58ff09dbf8f214c9ddfb3 Reviewed-on: https://pdfium-review.googlesource.com/17230 Reviewed-by: Tom Sepez Commit-Queue: Art Snake --- fpdfsdk/formfiller/cba_fontmap.cpp | 11 +++++------ fpdfsdk/fpdf_attachment.cpp | 11 ++++------- fpdfsdk/fpdf_edittext.cpp | 20 ++++++++------------ fpdfsdk/fpdf_flatten.cpp | 29 +++++++++++++---------------- fpdfsdk/fpdf_ppo.cpp | 11 +++++------ fpdfsdk/fpdf_save.cpp | 6 ++---- fpdfsdk/fpdf_transformpage.cpp | 24 ++++++++++++------------ fpdfsdk/pwl/cpwl_appstream.cpp | 7 +++---- 8 files changed, 52 insertions(+), 67 deletions(-) (limited to 'fpdfsdk') diff --git a/fpdfsdk/formfiller/cba_fontmap.cpp b/fpdfsdk/formfiller/cba_fontmap.cpp index 671ba92282..d8d7dffd69 100644 --- a/fpdfsdk/formfiller/cba_fontmap.cpp +++ b/fpdfsdk/formfiller/cba_fontmap.cpp @@ -166,8 +166,7 @@ void CBA_FontMap::AddFontToAnnotDict(CPDF_Font* pFont, CPDF_Stream* pStream = pAPDict->GetStreamFor(m_sAPType); if (!pStream) { pStream = m_pDocument->NewIndirect(); - pAPDict->SetNewFor(m_sAPType, m_pDocument.Get(), - pStream->GetObjNum()); + pAPDict->SetFor(m_sAPType, pStream->MakeReference(m_pDocument.Get())); } CPDF_Dictionary* pStreamDict = pStream->GetDict(); @@ -184,12 +183,12 @@ void CBA_FontMap::AddFontToAnnotDict(CPDF_Font* pFont, CPDF_Dictionary* pStreamResFontList = pStreamResList->GetDictFor("Font"); if (!pStreamResFontList) { pStreamResFontList = m_pDocument->NewIndirect(); - pStreamResList->SetNewFor("Font", m_pDocument.Get(), - pStreamResFontList->GetObjNum()); + pStreamResList->SetFor( + "Font", pStreamResFontList->MakeReference(m_pDocument.Get())); } if (!pStreamResFontList->KeyExist(sAlias)) { - pStreamResFontList->SetNewFor( - sAlias, m_pDocument.Get(), pFont->GetFontDict()->GetObjNum()); + pStreamResFontList->SetFor( + sAlias, pFont->GetFontDict()->MakeReference(m_pDocument.Get())); } } diff --git a/fpdfsdk/fpdf_attachment.cpp b/fpdfsdk/fpdf_attachment.cpp index f2ed684e40..6a4faf6c65 100644 --- a/fpdfsdk/fpdf_attachment.cpp +++ b/fpdfsdk/fpdf_attachment.cpp @@ -72,15 +72,14 @@ FPDFDoc_AddAttachment(FPDF_DOCUMENT document, FPDF_WIDESTRING name) { CPDF_Dictionary* pNames = pRoot->GetDictFor("Names"); if (!pNames) { pNames = pDoc->NewIndirect(); - pRoot->SetNewFor("Names", pDoc, pNames->GetObjNum()); + pRoot->SetFor("Names", pNames->MakeReference(pDoc)); } // Create the EmbeddedFiles dictionary if missing. if (!pNames->GetDictFor("EmbeddedFiles")) { CPDF_Dictionary* pFiles = pDoc->NewIndirect(); pFiles->SetNewFor("Names"); - pNames->SetNewFor("EmbeddedFiles", pDoc, - pFiles->GetObjNum()); + pNames->SetFor("EmbeddedFiles", pFiles->MakeReference(pDoc)); } // Set up the basic entries in the filespec dictionary. @@ -91,9 +90,7 @@ FPDFDoc_AddAttachment(FPDF_DOCUMENT document, FPDF_WIDESTRING name) { // Add the new attachment name and filespec into the document's EmbeddedFiles. CPDF_NameTree nameTree(pDoc, "EmbeddedFiles"); - if (!nameTree.AddValueAndName( - pdfium::MakeUnique(pDoc, pFile->GetObjNum()), - wsName)) { + if (!nameTree.AddValueAndName(pFile->MakeReference(pDoc), wsName)) { return nullptr; } @@ -254,7 +251,7 @@ FPDFAttachment_SetFile(FPDF_ATTACHMENT attachment, std::move(stream), len, std::move(pFileStreamDict)); CPDF_Dictionary* pEFDict = pFile->AsDictionary()->SetNewFor("EF"); - pEFDict->SetNewFor("F", pDoc, pFileStream->GetObjNum()); + pEFDict->SetFor("F", pFileStream->MakeReference(pDoc)); return true; } diff --git a/fpdfsdk/fpdf_edittext.cpp b/fpdfsdk/fpdf_edittext.cpp index 2996a505ee..2ead789204 100644 --- a/fpdfsdk/fpdf_edittext.cpp +++ b/fpdfsdk/fpdf_edittext.cpp @@ -74,7 +74,7 @@ CPDF_Dictionary* LoadFontDesc(CPDF_Document* pDoc, static_cast(size)); } ByteString fontFile = font_type == FPDF_FONT_TYPE1 ? "FontFile" : "FontFile2"; - pFontDesc->SetNewFor(fontFile, pDoc, pStream->GetObjNum()); + pFontDesc->SetFor(fontFile, pStream->MakeReference(pDoc)); return pFontDesc; } @@ -270,12 +270,11 @@ CPDF_Font* LoadSimpleFont(CPDF_Document* pDoc, currentChar = nextChar; } fontDict->SetNewFor("LastChar", static_cast(currentChar)); - fontDict->SetNewFor("Widths", pDoc, widthsArray->GetObjNum()); + fontDict->SetFor("Widths", widthsArray->MakeReference(pDoc)); CPDF_Dictionary* pFontDesc = LoadFontDesc(pDoc, name, pFont.get(), data, size, font_type); - fontDict->SetNewFor("FontDescriptor", pDoc, - pFontDesc->GetObjNum()); + fontDict->SetFor("FontDescriptor", pFontDesc->MakeReference(pDoc)); return pDoc->LoadFont(fontDict); } @@ -311,13 +310,11 @@ CPDF_Font* LoadCompositeFont(CPDF_Document* pDoc, pCIDSystemInfo->SetNewFor("Registry", "Adobe"); pCIDSystemInfo->SetNewFor("Ordering", "Identity"); pCIDSystemInfo->SetNewFor("Supplement", 0); - pCIDFont->SetNewFor("CIDSystemInfo", pDoc, - pCIDSystemInfo->GetObjNum()); + pCIDFont->SetFor("CIDSystemInfo", pCIDSystemInfo->MakeReference(pDoc)); CPDF_Dictionary* pFontDesc = LoadFontDesc(pDoc, name, pFont.get(), data, size, font_type); - pCIDFont->SetNewFor("FontDescriptor", pDoc, - pFontDesc->GetObjNum()); + pCIDFont->SetFor("FontDescriptor", pFontDesc->MakeReference(pDoc)); uint32_t glyphIndex; uint32_t currentChar = FXFT_Get_First_Char(pFont->GetFace(), &glyphIndex); @@ -386,15 +383,14 @@ CPDF_Font* LoadCompositeFont(CPDF_Document* pDoc, } widthsArray->Add(std::move(curWidthArray)); } - pCIDFont->SetNewFor("W", pDoc, widthsArray->GetObjNum()); + pCIDFont->SetFor("W", widthsArray->MakeReference(pDoc)); // TODO(npm): Support vertical writing auto pDescendant = pdfium::MakeUnique(); - pDescendant->AddNew(pDoc, pCIDFont->GetObjNum()); + pDescendant->Add(pCIDFont->MakeReference(pDoc)); fontDict->SetFor("DescendantFonts", std::move(pDescendant)); CPDF_Stream* toUnicodeStream = LoadUnicode(pDoc, to_unicode); - fontDict->SetNewFor("ToUnicode", pDoc, - toUnicodeStream->GetObjNum()); + fontDict->SetFor("ToUnicode", toUnicodeStream->MakeReference(pDoc)); return pDoc->LoadFont(fontDict); } diff --git a/fpdfsdk/fpdf_flatten.cpp b/fpdfsdk/fpdf_flatten.cpp index d35cfe370d..4b9e1f8a9d 100644 --- a/fpdfsdk/fpdf_flatten.cpp +++ b/fpdfsdk/fpdf_flatten.cpp @@ -169,15 +169,15 @@ CFX_FloatRect CalculateRect(std::vector* pRectArray) { return rcRet; } -uint32_t NewIndirectContentsStream(const ByteString& key, - CPDF_Document* pDocument) { +CPDF_Object* NewIndirectContentsStream(const ByteString& key, + CPDF_Document* pDocument) { CPDF_Stream* pNewContents = pDocument->NewIndirect( nullptr, 0, pdfium::MakeUnique(pDocument->GetByteStringPool())); ByteString sStream = ByteString::Format("q 1 0 0 1 0 0 cm /%s Do Q", key.c_str()); pNewContents->SetData(sStream.raw_str(), sStream.GetLength()); - return pNewContents->GetObjNum(); + return pNewContents; } void SetPageContents(const ByteString& key, @@ -190,9 +190,9 @@ void SetPageContents(const ByteString& key, pContentsArray = pPage->GetArrayFor(pdfium::page_object::kContents); if (!pContentsArray) { if (!key.IsEmpty()) { - pPage->SetNewFor( - pdfium::page_object::kContents, pDocument, - NewIndirectContentsStream(key, pDocument)); + pPage->SetFor(pdfium::page_object::kContents, + NewIndirectContentsStream(key, pDocument) + ->MakeReference(pDocument)); } return; } @@ -207,14 +207,13 @@ void SetPageContents(const ByteString& key, sStream = sStream + sBody + "\nQ"; pContentsStream->SetDataAndRemoveFilter(sStream.raw_str(), sStream.GetLength()); - pContentsArray->AddNew(pDocument, - pContentsStream->GetObjNum()); - pPage->SetNewFor(pdfium::page_object::kContents, pDocument, - pContentsArray->GetObjNum()); + pContentsArray->Add(pContentsStream->MakeReference(pDocument)); + pPage->SetFor(pdfium::page_object::kContents, + pContentsArray->MakeReference(pDocument)); } if (!key.IsEmpty()) { - pContentsArray->AddNew( - pDocument, NewIndirectContentsStream(key, pDocument)); + pContentsArray->Add( + NewIndirectContentsStream(key, pDocument)->MakeReference(pDocument)); } } @@ -290,7 +289,6 @@ FPDF_EXPORT int FPDF_CALLCONV FPDFPage_Flatten(FPDF_PAGE page, int nFlag) { nullptr, 0, pdfium::MakeUnique(pDocument->GetByteStringPool())); - uint32_t dwObjNum = pNewXObject->GetObjNum(); CPDF_Dictionary* pPageXObject = pRes->GetDictFor("XObject"); if (!pPageXObject) pPageXObject = pRes->SetNewFor("XObject"); @@ -312,7 +310,7 @@ FPDF_EXPORT int FPDF_CALLCONV FPDFPage_Flatten(FPDF_PAGE page, int nFlag) { CPDF_Dictionary* pNewXORes = nullptr; if (!key.IsEmpty()) { - pPageXObject->SetNewFor(key, pDocument, dwObjNum); + pPageXObject->SetFor(key, pNewXObject->MakeReference(pDocument)); CPDF_Dictionary* pNewOXbjectDic = pNewXObject->GetDict(); pNewXORes = pNewOXbjectDic->SetNewFor("Resources"); pNewOXbjectDic->SetNewFor("Type", "XObject"); @@ -387,8 +385,7 @@ FPDF_EXPORT int FPDF_CALLCONV FPDFPage_Flatten(FPDF_PAGE page, int nFlag) { pXObject = pNewXORes->SetNewFor("XObject"); ByteString sFormName = ByteString::Format("F%d", i); - pXObject->SetNewFor(sFormName, pDocument, - pObj->GetObjNum()); + pXObject->SetFor(sFormName, pObj->MakeReference(pDocument)); auto pAcc = pdfium::MakeRetain(pNewXObject); pAcc->LoadAllDataFiltered(); diff --git a/fpdfsdk/fpdf_ppo.cpp b/fpdfsdk/fpdf_ppo.cpp index c4bd51e603..8bbae7258d 100644 --- a/fpdfsdk/fpdf_ppo.cpp +++ b/fpdfsdk/fpdf_ppo.cpp @@ -337,8 +337,7 @@ bool CPDF_PageOrganizer::PDFDocInit() { pElement ? ToDictionary(pElement->GetDirect()) : nullptr; if (!pNewPages) { pNewPages = dest()->NewIndirect(); - pNewRoot->SetNewFor("Pages", dest(), - pNewPages->GetObjNum()); + pNewRoot->SetFor("Pages", pNewPages->MakeReference(dest())); } ByteString cbPageType = pNewPages->GetStringFor("Type", ""); @@ -347,8 +346,8 @@ bool CPDF_PageOrganizer::PDFDocInit() { if (!pNewPages->GetArrayFor("Kids")) { pNewPages->SetNewFor("Count", 0); - pNewPages->SetNewFor( - "Kids", dest(), dest()->NewIndirect()->GetObjNum()); + pNewPages->SetFor("Kids", + dest()->NewIndirect()->MakeReference(dest())); } return true; @@ -754,8 +753,8 @@ void CPDF_NPageToOneExporter::FinishPage( CPDF_Stream* pStream = dest()->NewIndirect(nullptr, 0, std::move(pDict)); pStream->SetData(bsContent.raw_str(), bsContent.GetLength()); - pDestPageDict->SetNewFor(pdfium::page_object::kContents, - dest(), pStream->GetObjNum()); + pDestPageDict->SetFor(pdfium::page_object::kContents, + pStream->MakeReference(dest())); } } // namespace diff --git a/fpdfsdk/fpdf_save.cpp b/fpdfsdk/fpdf_save.cpp index 6064a73629..52b87264e7 100644 --- a/fpdfsdk/fpdf_save.cpp +++ b/fpdfsdk/fpdf_save.cpp @@ -138,8 +138,7 @@ bool SaveXFADocumentData(CPDFXFA_Context* pContext, pData->InitStreamFromFile(pDsfileWrite, std::move(pDataDict)); iLast = pArray->GetCount() - 2; pArray->InsertNewAt(iLast, "datasets", false); - pArray->InsertNewAt(iLast + 1, pPDFDocument, - pData->GetObjNum()); + pArray->InsertAt(iLast + 1, pData->MakeReference(pPDFDocument)); } fileList->push_back(std::move(pDsfileWrite)); } @@ -164,8 +163,7 @@ bool SaveXFADocumentData(CPDFXFA_Context* pContext, pData->InitStreamFromFile(pfileWrite, std::move(pDataDict)); iLast = pArray->GetCount() - 2; pArray->InsertNewAt(iLast, "form", false); - pArray->InsertNewAt(iLast + 1, pPDFDocument, - pData->GetObjNum()); + pArray->InsertAt(iLast + 1, pData->MakeReference(pPDFDocument)); } fileList->push_back(std::move(pfileWrite)); } diff --git a/fpdfsdk/fpdf_transformpage.cpp b/fpdfsdk/fpdf_transformpage.cpp index 267b582a47..d20b28fe81 100644 --- a/fpdfsdk/fpdf_transformpage.cpp +++ b/fpdfsdk/fpdf_transformpage.cpp @@ -144,15 +144,15 @@ FPDFPage_TransFormWithClip(FPDF_PAGE page, pEndStream->SetData((const uint8_t*)" Q", 2); if (CPDF_Array* pContentArray = ToArray(pContentObj)) { - pContentArray->InsertNewAt(0, pDoc, pStream->GetObjNum()); - pContentArray->AddNew(pDoc, pEndStream->GetObjNum()); + pContentArray->InsertAt(0, pStream->MakeReference(pDoc)); + pContentArray->Add(pEndStream->MakeReference(pDoc)); } else if (pContentObj->IsStream() && !pContentObj->IsInline()) { CPDF_Array* pContentArray = pDoc->NewIndirect(); - pContentArray->AddNew(pDoc, pStream->GetObjNum()); - pContentArray->AddNew(pDoc, pContentObj->GetObjNum()); - pContentArray->AddNew(pDoc, pEndStream->GetObjNum()); - pPageDict->SetNewFor(pdfium::page_object::kContents, pDoc, - pContentArray->GetObjNum()); + pContentArray->Add(pStream->MakeReference(pDoc)); + pContentArray->Add(pContentObj->MakeReference(pDoc)); + pContentArray->Add(pEndStream->MakeReference(pDoc)); + pPageDict->SetFor(pdfium::page_object::kContents, + pContentArray->MakeReference(pDoc)); } // Need to transform the patterns as well. @@ -298,12 +298,12 @@ FPDF_EXPORT void FPDF_CALLCONV FPDFPage_InsertClipPath(FPDF_PAGE page, pStream->SetData(&strClip); if (CPDF_Array* pArray = ToArray(pContentObj)) { - pArray->InsertNewAt(0, pDoc, pStream->GetObjNum()); + pArray->InsertAt(0, pStream->MakeReference(pDoc)); } else if (pContentObj->IsStream() && !pContentObj->IsInline()) { CPDF_Array* pContentArray = pDoc->NewIndirect(); - pContentArray->AddNew(pDoc, pStream->GetObjNum()); - pContentArray->AddNew(pDoc, pContentObj->GetObjNum()); - pPageDict->SetNewFor(pdfium::page_object::kContents, pDoc, - pContentArray->GetObjNum()); + pContentArray->Add(pStream->MakeReference(pDoc)); + pContentArray->Add(pContentObj->MakeReference(pDoc)); + pPageDict->SetFor(pdfium::page_object::kContents, + pContentArray->MakeReference(pDoc)); } } diff --git a/fpdfsdk/pwl/cpwl_appstream.cpp b/fpdfsdk/pwl/cpwl_appstream.cpp index cbe6501a32..01ef48a298 100644 --- a/fpdfsdk/pwl/cpwl_appstream.cpp +++ b/fpdfsdk/pwl/cpwl_appstream.cpp @@ -1910,9 +1910,8 @@ void CPWL_AppStream::AddImage(const ByteString& sAPType, CPDF_Stream* pImage) { CPDF_Dictionary* pXObject = pStreamResList->SetNewFor("XObject"); - pXObject->SetNewFor(sImageAlias, - widget_->GetPageView()->GetPDFDocument(), - pImage->GetObjNum()); + pXObject->SetFor(sImageAlias, pImage->MakeReference( + widget_->GetPageView()->GetPDFDocument())); } void CPWL_AppStream::Write(const ByteString& sAPType, @@ -1935,7 +1934,7 @@ void CPWL_AppStream::Write(const ByteString& sAPType, if (!pStream) { CPDF_Document* doc = widget_->GetPageView()->GetPDFDocument(); pStream = doc->NewIndirect(); - pParentDict->SetNewFor(sAPType, doc, pStream->GetObjNum()); + pParentDict->SetFor(sAPType, pStream->MakeReference(doc)); } CPDF_Dictionary* pStreamDict = pStream->GetDict(); -- cgit v1.2.3