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 CONSTRUCT_VIA_MAKE_RETAIN; 46 47 size_t CountItems() const; 48 bool ContainsItem(const CPDF_ContentMarkItem* pItem) const; 49 CPDF_ContentMarkItem* GetItem(size_t index); 50 const CPDF_ContentMarkItem* GetItem(size_t index) const; 51 52 int GetMarkedContentID() const; 53 void AddMark(ByteString name); 54 void AddMarkWithDirectDict(ByteString name, 55 RetainPtr<CPDF_Dictionary> pDict); 56 void AddMarkWithPropertiesHolder(const ByteString& name, 57 RetainPtr<CPDF_Dictionary> pDict, 58 const ByteString& property_name); 59 bool RemoveMark(CPDF_ContentMarkItem* pMarkItem); 60 61 private: 62 MarkData(); 63 MarkData(const MarkData& src); 64 ~MarkData() override; 65 66 std::vector<RetainPtr<CPDF_ContentMarkItem>> m_Marks; 67 }; 68 69 void EnsureMarkDataExists(); 70 71 RetainPtr<MarkData> m_pMarkData; 72 }; 73 74 #endif // CORE_FPDFAPI_PAGE_CPDF_CONTENTMARKS_H_ 75