summaryrefslogtreecommitdiff
path: root/core/fpdfapi/fpdf_page/cpdf_contentmark.cpp
diff options
context:
space:
mode:
authortsepez <tsepez@chromium.org>2016-09-06 12:24:12 -0700
committerCommit bot <commit-bot@chromium.org>2016-09-06 12:24:12 -0700
commitf692e8e33eb2e6811196170238471532edae6858 (patch)
treea7f45ad5a87a4ddf05530eb2ca23d16eabdba8f2 /core/fpdfapi/fpdf_page/cpdf_contentmark.cpp
parentf40c6f122d6ddd73de21d225fca0c1734c9bdeac (diff)
downloadpdfium-f692e8e33eb2e6811196170238471532edae6858.tar.xz
Make CPDF_ContentMarkData private to CPDF_ContentMark
Review-Url: https://codereview.chromium.org/2312743005
Diffstat (limited to 'core/fpdfapi/fpdf_page/cpdf_contentmark.cpp')
-rw-r--r--core/fpdfapi/fpdf_page/cpdf_contentmark.cpp63
1 files changed, 60 insertions, 3 deletions
diff --git a/core/fpdfapi/fpdf_page/cpdf_contentmark.cpp b/core/fpdfapi/fpdf_page/cpdf_contentmark.cpp
index c36f407c36..2e28989976 100644
--- a/core/fpdfapi/fpdf_page/cpdf_contentmark.cpp
+++ b/core/fpdfapi/fpdf_page/cpdf_contentmark.cpp
@@ -6,6 +6,9 @@
#include "core/fpdfapi/fpdf_page/cpdf_contentmark.h"
+#include "core/fpdfapi/fpdf_parser/include/cpdf_dictionary.h"
+#include "third_party/base/stl_util.h"
+
CPDF_ContentMark::CPDF_ContentMark() {}
CPDF_ContentMark::CPDF_ContentMark(const CPDF_ContentMark& that)
@@ -26,7 +29,7 @@ const CPDF_ContentMarkItem& CPDF_ContentMark::GetItem(int i) const {
}
int CPDF_ContentMark::GetMCID() const {
- const CPDF_ContentMarkData* pData = m_Ref.GetObject();
+ const MarkData* pData = m_Ref.GetObject();
return pData ? pData->GetMCID() : -1;
}
@@ -43,7 +46,7 @@ void CPDF_ContentMark::DeleteLastMark() {
}
bool CPDF_ContentMark::HasMark(const CFX_ByteStringC& mark) const {
- const CPDF_ContentMarkData* pData = m_Ref.GetObject();
+ const MarkData* pData = m_Ref.GetObject();
if (!pData)
return false;
@@ -56,7 +59,7 @@ bool CPDF_ContentMark::HasMark(const CFX_ByteStringC& mark) const {
bool CPDF_ContentMark::LookupMark(const CFX_ByteStringC& mark,
CPDF_Dictionary*& pDict) const {
- const CPDF_ContentMarkData* pData = m_Ref.GetObject();
+ const MarkData* pData = m_Ref.GetObject();
if (!pData)
return false;
@@ -73,3 +76,57 @@ bool CPDF_ContentMark::LookupMark(const CFX_ByteStringC& mark,
}
return false;
}
+
+CPDF_ContentMark::MarkData::MarkData() {}
+
+CPDF_ContentMark::MarkData::MarkData(const MarkData& src)
+ : m_Marks(src.m_Marks) {}
+
+CPDF_ContentMark::MarkData::~MarkData() {}
+
+int CPDF_ContentMark::MarkData::CountItems() const {
+ return pdfium::CollectionSize<int>(m_Marks);
+}
+
+CPDF_ContentMarkItem& CPDF_ContentMark::MarkData::GetItem(int index) {
+ return m_Marks[index];
+}
+
+const CPDF_ContentMarkItem& CPDF_ContentMark::MarkData::GetItem(
+ int index) const {
+ return m_Marks[index];
+}
+
+int CPDF_ContentMark::MarkData::GetMCID() const {
+ for (const auto& mark : m_Marks) {
+ CPDF_ContentMarkItem::ParamType type = mark.GetParamType();
+ if (type == CPDF_ContentMarkItem::PropertiesDict ||
+ type == CPDF_ContentMarkItem::DirectDict) {
+ CPDF_Dictionary* pDict = mark.GetParam();
+ if (pDict->KeyExist("MCID"))
+ return pDict->GetIntegerBy("MCID");
+ }
+ }
+ return -1;
+}
+
+void CPDF_ContentMark::MarkData::AddMark(const CFX_ByteString& name,
+ CPDF_Dictionary* pDict,
+ FX_BOOL bDirect) {
+ CPDF_ContentMarkItem item;
+ item.SetName(name);
+ if (pDict) {
+ if (bDirect) {
+ item.SetParam(CPDF_ContentMarkItem::DirectDict,
+ ToDictionary(pDict->Clone()));
+ } else {
+ item.SetParam(CPDF_ContentMarkItem::PropertiesDict, pDict);
+ }
+ }
+ m_Marks.push_back(item);
+}
+
+void CPDF_ContentMark::MarkData::DeleteLastMark() {
+ if (!m_Marks.empty())
+ m_Marks.pop_back();
+}