summaryrefslogtreecommitdiff
path: root/core/fpdfapi/parser/cpdf_array.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'core/fpdfapi/parser/cpdf_array.cpp')
-rw-r--r--core/fpdfapi/parser/cpdf_array.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/core/fpdfapi/parser/cpdf_array.cpp b/core/fpdfapi/parser/cpdf_array.cpp
index f3c23f37be..aa10588f87 100644
--- a/core/fpdfapi/parser/cpdf_array.cpp
+++ b/core/fpdfapi/parser/cpdf_array.cpp
@@ -193,3 +193,32 @@ CPDF_Object* CPDF_Array::Add(std::unique_ptr<CPDF_Object> pObj) {
m_Objects.push_back(std::move(pObj));
return pRet;
}
+
+bool CPDF_Array::WriteTo(CFX_FileBufferArchive* archive,
+ FX_FILESIZE* offset) const {
+ if (archive->AppendString("[") < 0)
+ return false;
+ *offset += 1;
+
+ for (size_t i = 0; i < GetCount(); ++i) {
+ CPDF_Object* pElement = GetObjectAt(i);
+ if (!pElement->IsInline()) {
+ if (archive->AppendString(" ") < 0)
+ return false;
+
+ int32_t len = archive->AppendDWord(pElement->GetObjNum());
+ if (len < 0)
+ return false;
+ if (archive->AppendString(" 0 R") < 0)
+ return false;
+ *offset += len + 5;
+ } else {
+ if (!pElement->WriteTo(archive, offset))
+ return false;
+ }
+ }
+ if (archive->AppendString("]") < 0)
+ return false;
+ *offset += 1;
+ return true;
+}