1 // Copyright 2016 The PDFium Authors 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 <stddef.h> 11 12 #include <memory> 13 #include <vector> 14 15 #include "core/fpdfapi/page/cpdf_contentmarkitem.h" 16 #include "core/fxcrt/retain_ptr.h" 17 18 class CPDF_Dictionary; 19 20 class CPDF_ContentMarks { 21 public: 22 CPDF_ContentMarks(); 23 ~CPDF_ContentMarks(); 24 25 std::unique_ptr<CPDF_ContentMarks> Clone(); 26 int GetMarkedContentID() const; 27 size_t CountItems() const; 28 bool ContainsItem(const CPDF_ContentMarkItem* pItem) const; 29 30 // The returned pointer is never null. 31 CPDF_ContentMarkItem* GetItem(size_t index); 32 const CPDF_ContentMarkItem* GetItem(size_t index) const; 33 34 void AddMark(ByteString name); 35 void AddMarkWithDirectDict(ByteString name, RetainPtr<CPDF_Dictionary> pDict); 36 void AddMarkWithPropertiesHolder(const ByteString& name, 37 RetainPtr<CPDF_Dictionary> pDict, 38 const ByteString& property_name); 39 bool RemoveMark(CPDF_ContentMarkItem* pMarkItem); 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, 57 RetainPtr<CPDF_Dictionary> pDict); 58 void AddMarkWithPropertiesHolder(const ByteString& name, 59 RetainPtr<CPDF_Dictionary> pDict, 60 const ByteString& property_name); 61 bool RemoveMark(CPDF_ContentMarkItem* pMarkItem); 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