diff options
author | Dan Sinclair <dsinclair@chromium.org> | 2017-05-08 16:59:54 -0400 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2017-05-09 03:41:16 +0000 |
commit | c68b1e73ce8210e2b33491da160dda5dd48599c0 (patch) | |
tree | e5a52ad9b47213214ae30e96d93b832637f94c51 /core/fpdfapi/parser/cpdf_dictionary.cpp | |
parent | 309d4db0cbf7ac8a5daee85d5761dd27868b4e42 (diff) | |
download | pdfium-c68b1e73ce8210e2b33491da160dda5dd48599c0.tar.xz |
Remove AppendObject from CPDF_Creator
The AppendObject method has been removed and the functionality moved
to the individual CPDF_Object classes.
Change-Id: I5446c6cc3e792d849acf77caed34b63a88f3a2d2
Reviewed-on: https://pdfium-review.googlesource.com/5072
Commit-Queue: dsinclair <dsinclair@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Diffstat (limited to 'core/fpdfapi/parser/cpdf_dictionary.cpp')
-rw-r--r-- | core/fpdfapi/parser/cpdf_dictionary.cpp | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/core/fpdfapi/parser/cpdf_dictionary.cpp b/core/fpdfapi/parser/cpdf_dictionary.cpp index d4e4080d31..7d84083829 100644 --- a/core/fpdfapi/parser/cpdf_dictionary.cpp +++ b/core/fpdfapi/parser/cpdf_dictionary.cpp @@ -16,6 +16,7 @@ #include "core/fpdfapi/parser/cpdf_reference.h" #include "core/fpdfapi/parser/cpdf_stream.h" #include "core/fpdfapi/parser/cpdf_string.h" +#include "core/fpdfapi/parser/fpdf_parser_decode.h" #include "third_party/base/logging.h" #include "third_party/base/stl_util.h" @@ -237,3 +238,41 @@ void CPDF_Dictionary::SetMatrixFor(const CFX_ByteString& key, CFX_ByteString CPDF_Dictionary::MaybeIntern(const CFX_ByteString& str) { return m_pPool ? m_pPool->Intern(str) : str; } + +bool CPDF_Dictionary::WriteTo(CFX_FileBufferArchive* archive, + FX_FILESIZE* offset) const { + if (archive->AppendString("<<") < 0) + return false; + *offset += 2; + + for (const auto& it : *this) { + const CFX_ByteString& key = it.first; + CPDF_Object* pValue = it.second.get(); + if (archive->AppendString("/") < 0) + return false; + + int32_t len = archive->AppendString(PDF_NameEncode(key).AsStringC()); + if (len < 0) + return false; + *offset += len + 1; + + if (!pValue->IsInline()) { + if (archive->AppendString(" ") < 0) + return false; + + len = archive->AppendDWord(pValue->GetObjNum()); + if (len < 0) + return false; + if (archive->AppendString(" 0 R") < 0) + return false; + *offset += len + 5; + } else { + if (!pValue->WriteTo(archive, offset)) + return false; + } + } + if (archive->AppendString(">>") < 0) + return false; + *offset += 2; + return true; +} |