summaryrefslogtreecommitdiff
path: root/core/fpdfdoc/doc_tagged.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'core/fpdfdoc/doc_tagged.cpp')
-rw-r--r--core/fpdfdoc/doc_tagged.cpp47
1 files changed, 8 insertions, 39 deletions
diff --git a/core/fpdfdoc/doc_tagged.cpp b/core/fpdfdoc/doc_tagged.cpp
index 10c573b5ca..39feaeef88 100644
--- a/core/fpdfdoc/doc_tagged.cpp
+++ b/core/fpdfdoc/doc_tagged.cpp
@@ -5,6 +5,8 @@
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#include <map>
+#include <memory>
+#include <utility>
#include "core/fpdfapi/parser/cpdf_array.h"
#include "core/fpdfapi/parser/cpdf_dictionary.h"
@@ -16,6 +18,7 @@
#include "core/fpdfdoc/cpdf_numbertree.h"
#include "core/fpdfdoc/fpdf_tagged.h"
#include "core/fpdfdoc/tagged_int.h"
+#include "third_party/base/ptr_util.h"
namespace {
@@ -30,24 +33,15 @@ bool IsTagged(const CPDF_Document* pDoc) {
} // namespace
// static
-IPDF_StructTree* IPDF_StructTree::LoadPage(const CPDF_Document* pDoc,
- const CPDF_Dictionary* pPageDict) {
+std::unique_ptr<IPDF_StructTree> IPDF_StructTree::LoadPage(
+ const CPDF_Document* pDoc,
+ const CPDF_Dictionary* pPageDict) {
if (!IsTagged(pDoc))
return nullptr;
- CPDF_StructTreeImpl* pTree = new CPDF_StructTreeImpl(pDoc);
+ auto pTree = pdfium::MakeUnique<CPDF_StructTreeImpl>(pDoc);
pTree->LoadPageTree(pPageDict);
- return pTree;
-}
-
-// static.
-IPDF_StructTree* IPDF_StructTree::LoadDoc(const CPDF_Document* pDoc) {
- if (!IsTagged(pDoc))
- return nullptr;
-
- CPDF_StructTreeImpl* pTree = new CPDF_StructTreeImpl(pDoc);
- pTree->LoadDocTree();
- return pTree;
+ return std::move(pTree);
}
CPDF_StructTreeImpl::CPDF_StructTreeImpl(const CPDF_Document* pDoc)
@@ -65,31 +59,6 @@ IPDF_StructElement* CPDF_StructTreeImpl::GetTopElement(int i) const {
return m_Kids[i].Get();
}
-void CPDF_StructTreeImpl::LoadDocTree() {
- m_pPage = nullptr;
- if (!m_pTreeRoot)
- return;
-
- CPDF_Object* pKids = m_pTreeRoot->GetDirectObjectFor("K");
- if (!pKids)
- return;
-
- if (CPDF_Dictionary* pDict = pKids->AsDictionary()) {
- m_Kids.push_back(CFX_RetainPtr<CPDF_StructElementImpl>(
- new CPDF_StructElementImpl(this, nullptr, pDict)));
- return;
- }
-
- CPDF_Array* pArray = pKids->AsArray();
- if (!pArray)
- return;
-
- for (size_t i = 0; i < pArray->GetCount(); i++) {
- m_Kids.push_back(CFX_RetainPtr<CPDF_StructElementImpl>(
- new CPDF_StructElementImpl(this, nullptr, pArray->GetDictAt(i))));
- }
-}
-
void CPDF_StructTreeImpl::LoadPageTree(const CPDF_Dictionary* pPageDict) {
m_pPage = pPageDict;
if (!m_pTreeRoot)