1 // Copyright 2016 PDFium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6 7 #include "core/fpdfdoc/cpdf_bookmarktree.h" 8 9 #include "core/fpdfapi/parser/cpdf_dictionary.h" 10 #include "core/fpdfapi/parser/cpdf_document.h" 11 CPDF_BookmarkTree(CPDF_Document * pDoc)12CPDF_BookmarkTree::CPDF_BookmarkTree(CPDF_Document* pDoc) : m_pDocument(pDoc) {} 13 14 CPDF_BookmarkTree::~CPDF_BookmarkTree() = default; 15 GetFirstChild(CPDF_Bookmark * parent) const16CPDF_Bookmark CPDF_BookmarkTree::GetFirstChild(CPDF_Bookmark* parent) const { 17 const CPDF_Dictionary* pParentDict = parent->GetDict(); 18 if (pParentDict) 19 return CPDF_Bookmark(pParentDict->GetDictFor("First")); 20 21 CPDF_Dictionary* pRoot = m_pDocument->GetRoot(); 22 if (!pRoot) 23 return CPDF_Bookmark(); 24 25 CPDF_Dictionary* pOutlines = pRoot->GetDictFor("Outlines"); 26 return pOutlines ? CPDF_Bookmark(pOutlines->GetDictFor("First")) 27 : CPDF_Bookmark(); 28 } 29 GetNextSibling(CPDF_Bookmark * bookmark) const30CPDF_Bookmark CPDF_BookmarkTree::GetNextSibling(CPDF_Bookmark* bookmark) const { 31 const CPDF_Dictionary* pDict = bookmark->GetDict(); 32 if (!pDict) 33 return CPDF_Bookmark(); 34 35 const CPDF_Dictionary* pNext = pDict->GetDictFor("Next"); 36 return pNext == pDict ? CPDF_Bookmark() : CPDF_Bookmark(pNext); 37 } 38