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 #ifndef CORE_FPDFAPI_PAGE_CPDF_CONTENTMARKS_H_ 8 #define CORE_FPDFAPI_PAGE_CPDF_CONTENTMARKS_H_ 9 10 #include <memory> 11 #include <vector> 12 13 #include "core/fpdfapi/page/cpdf_contentmarkitem.h" 14 #include "core/fxcrt/fx_system.h" 15 #include "core/fxcrt/retain_ptr.h" 16 17 class CPDF_Dictionary; 18 19 class CPDF_ContentMarks { 20 public: 21 CPDF_ContentMarks(); 22 ~CPDF_ContentMarks(); 23 24 std::unique_ptr<CPDF_ContentMarks> Clone(); 25 int GetMarkedContentID() const; 26 size_t CountItems() const; 27 bool ContainsItem(const CPDF_ContentMarkItem* pItem) const; 28 29 // The returned pointer is never null. 30 CPDF_ContentMarkItem* GetItem(size_t index); 31 const CPDF_ContentMarkItem* GetItem(size_t index) const; 32 33 void AddMark(ByteString name); 34 void AddMarkWithDirectDict(ByteString name, CPDF_Dictionary* pDict); 35 void AddMarkWithPropertiesHolder(const ByteString& name, 36 CPDF_Dictionary* pDict, 37 const ByteString& property_name); 38 bool RemoveMark(CPDF_ContentMarkItem* pMarkItem); 39 void DeleteLastMark(); 40 size_t FindFirstDifference(const CPDF_ContentMarks* other) const; 41 42 private: 43 class MarkData final : public Retainable { 44 public: 45 MarkData(); 46 MarkData(const MarkData& src); 47 ~MarkData() override; 48 49 size_t CountItems() const; 50 bool ContainsItem(const CPDF_ContentMarkItem* pItem) const; 51 CPDF_ContentMarkItem* GetItem(size_t index); 52 const CPDF_ContentMarkItem* GetItem(size_t index) const; 53 54 int GetMarkedContentID() const; 55 void AddMark(ByteString name); 56 void AddMarkWithDirectDict(ByteString name, CPDF_Dictionary* pDict); 57 void AddMarkWithPropertiesHolder(const ByteString& name, 58 CPDF_Dictionary* pDict, 59 const ByteString& property_name); 60 bool RemoveMark(CPDF_ContentMarkItem* pMarkItem); 61 void DeleteLastMark(); 62 63 private: 64 std::vector<RetainPtr<CPDF_ContentMarkItem>> m_Marks; 65 }; 66 67 void EnsureMarkDataExists(); 68 69 RetainPtr<MarkData> m_pMarkData; 70 }; 71 72 #endif // CORE_FPDFAPI_PAGE_CPDF_CONTENTMARKS_H_ 73