Index: core/fpdfapi/fpdf_page/cpdf_form.cpp |
diff --git a/core/fpdfapi/fpdf_page/cpdf_form.cpp b/core/fpdfapi/fpdf_page/cpdf_form.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..a1160397fcfc3ec01e8178459d1bb7a26f406721 |
--- /dev/null |
+++ b/core/fpdfapi/fpdf_page/cpdf_form.cpp |
@@ -0,0 +1,65 @@ |
+// Copyright 2016 PDFium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
+ |
+#include "core/fpdfapi/fpdf_page/include/cpdf_form.h" |
+ |
+#include "core/fpdfapi/fpdf_page/include/cpdf_pageobjectholder.h" |
+#include "core/fpdfapi/fpdf_page/pageint.h" |
+#include "core/fpdfapi/fpdf_parser/include/cpdf_dictionary.h" |
+#include "core/fpdfapi/fpdf_parser/include/cpdf_stream.h" |
+ |
+CPDF_Form::CPDF_Form(CPDF_Document* pDoc, |
+ CPDF_Dictionary* pPageResources, |
+ CPDF_Stream* pFormStream, |
+ CPDF_Dictionary* pParentResources) { |
+ m_pDocument = pDoc; |
+ m_pFormStream = pFormStream; |
+ m_pFormDict = pFormStream ? pFormStream->GetDict() : NULL; |
+ m_pResources = m_pFormDict->GetDictBy("Resources"); |
+ m_pPageResources = pPageResources; |
+ if (!m_pResources) { |
+ m_pResources = pParentResources; |
+ } |
+ if (!m_pResources) { |
+ m_pResources = pPageResources; |
+ } |
+ m_Transparency = 0; |
+ LoadTransInfo(); |
+} |
+ |
+CPDF_Form::~CPDF_Form() {} |
+ |
+void CPDF_Form::StartParse(CPDF_AllStates* pGraphicStates, |
+ CFX_Matrix* pParentMatrix, |
+ CPDF_Type3Char* pType3Char, |
+ CPDF_ParseOptions* pOptions, |
+ int level) { |
+ if (m_ParseState == CONTENT_PARSED || m_ParseState == CONTENT_PARSING) { |
+ return; |
+ } |
+ m_pParser.reset(new CPDF_ContentParser); |
+ m_pParser->Start(this, pGraphicStates, pParentMatrix, pType3Char, pOptions, |
+ level); |
+ m_ParseState = CONTENT_PARSING; |
+} |
+ |
+void CPDF_Form::ParseContent(CPDF_AllStates* pGraphicStates, |
+ CFX_Matrix* pParentMatrix, |
+ CPDF_Type3Char* pType3Char, |
+ CPDF_ParseOptions* pOptions, |
+ int level) { |
+ StartParse(pGraphicStates, pParentMatrix, pType3Char, pOptions, level); |
+ ContinueParse(NULL); |
+} |
+ |
+CPDF_Form* CPDF_Form::Clone() const { |
+ CPDF_Form* pCloneForm = |
+ new CPDF_Form(m_pDocument, m_pPageResources, m_pFormStream, m_pResources); |
+ for (const auto& pObj : m_PageObjectList) |
+ pCloneForm->m_PageObjectList.emplace_back(pObj->Clone()); |
+ |
+ return pCloneForm; |
+} |