| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "xfa/fxfa/include/xfa_ffdoc.h" | 7 #include "xfa/fxfa/include/xfa_ffdoc.h" |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 | 10 |
| (...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 228 } else { | 228 } else { |
| 229 CXFA_Node* pNextSibling = | 229 CXFA_Node* pNextSibling = |
| 230 pChildNode->GetNodeItem(XFA_NODEITEM_NextSibling); | 230 pChildNode->GetNodeItem(XFA_NODEITEM_NextSibling); |
| 231 pNewRoot->RemoveChild(pChildNode); | 231 pNewRoot->RemoveChild(pChildNode); |
| 232 pOriginRoot->InsertChild(pChildNode); | 232 pOriginRoot->InsertChild(pChildNode); |
| 233 pChildNode = pNextSibling; | 233 pChildNode = pNextSibling; |
| 234 pNextSibling = nullptr; | 234 pNextSibling = nullptr; |
| 235 } | 235 } |
| 236 } | 236 } |
| 237 } | 237 } |
| 238 |
| 238 int32_t CXFA_FFDoc::DoLoad(IFX_Pause* pPause) { | 239 int32_t CXFA_FFDoc::DoLoad(IFX_Pause* pPause) { |
| 239 int32_t iStatus = m_pDocumentParser->DoParse(pPause); | 240 int32_t iStatus = m_pDocumentParser->DoParse(pPause); |
| 240 if (iStatus == XFA_PARSESTATUS_Done && !m_pPDFDoc) { | 241 if (iStatus == XFA_PARSESTATUS_Done && !m_pPDFDoc) |
| 241 CXFA_Node* pPDFNode = ToNode( | 242 return XFA_PARSESTATUS_SyntaxErr; |
| 242 m_pDocumentParser->GetDocument()->GetXFAObject(XFA_HASHCODE_Pdf)); | |
| 243 if (!pPDFNode) { | |
| 244 return XFA_PARSESTATUS_SyntaxErr; | |
| 245 } | |
| 246 CFDE_XMLNode* pPDFXML = pPDFNode->GetXMLMappingNode(); | |
| 247 if (pPDFXML->GetType() != FDE_XMLNODE_Element) { | |
| 248 return XFA_PARSESTATUS_SyntaxErr; | |
| 249 } | |
| 250 int32_t iBufferSize = 0; | |
| 251 uint8_t* pByteBuffer = nullptr; | |
| 252 IFX_FileRead* pXFAReader = nullptr; | |
| 253 if (XFA_GetPDFContentsFromPDFXML(pPDFXML, pByteBuffer, iBufferSize)) { | |
| 254 pXFAReader = FX_CreateMemoryStream(pByteBuffer, iBufferSize, TRUE); | |
| 255 } else { | |
| 256 CFX_WideString wsHref; | |
| 257 static_cast<CFDE_XMLElement*>(pPDFXML)->GetString(L"href", wsHref); | |
| 258 if (!wsHref.IsEmpty()) { | |
| 259 pXFAReader = GetDocProvider()->OpenLinkedFile(this, wsHref); | |
| 260 } | |
| 261 } | |
| 262 if (!pXFAReader) | |
| 263 return XFA_PARSESTATUS_SyntaxErr; | |
| 264 | |
| 265 CPDF_Document* pPDFDocument = | |
| 266 GetDocProvider()->OpenPDF(this, pXFAReader, TRUE); | |
| 267 ASSERT(!m_pPDFDoc); | |
| 268 if (!OpenDoc(pPDFDocument)) | |
| 269 return XFA_PARSESTATUS_SyntaxErr; | |
| 270 | |
| 271 CXFA_Document* doc = m_pDocumentParser->GetDocument(); | |
| 272 std::unique_ptr<CXFA_SimpleParser> pParser( | |
| 273 new CXFA_SimpleParser(doc, true)); | |
| 274 if (!pParser) | |
| 275 return XFA_PARSESTATUS_SyntaxErr; | |
| 276 | |
| 277 CXFA_Node* pRootNode = nullptr; | |
| 278 if (pParser->StartParse(m_pStream, XFA_XDPPACKET_XDP) == | |
| 279 XFA_PARSESTATUS_Ready && | |
| 280 pParser->DoParse(nullptr) == XFA_PARSESTATUS_Done) { | |
| 281 pRootNode = pParser->GetRootNode(); | |
| 282 } | |
| 283 if (pRootNode && doc->GetRoot()) { | |
| 284 XFA_XPDPacket_MergeRootNode(doc->GetRoot(), pRootNode); | |
| 285 iStatus = XFA_PARSESTATUS_Done; | |
| 286 } else { | |
| 287 iStatus = XFA_PARSESTATUS_StatusErr; | |
| 288 } | |
| 289 } | |
| 290 return iStatus; | 243 return iStatus; |
| 291 } | 244 } |
| 245 |
| 292 void CXFA_FFDoc::StopLoad() { | 246 void CXFA_FFDoc::StopLoad() { |
| 293 m_pApp->GetXFAFontMgr()->LoadDocFonts(this); | 247 m_pApp->GetXFAFontMgr()->LoadDocFonts(this); |
| 294 m_dwDocType = XFA_DOCTYPE_Static; | 248 m_dwDocType = XFA_DOCTYPE_Static; |
| 295 CXFA_Node* pConfig = ToNode( | 249 CXFA_Node* pConfig = ToNode( |
| 296 m_pDocumentParser->GetDocument()->GetXFAObject(XFA_HASHCODE_Config)); | 250 m_pDocumentParser->GetDocument()->GetXFAObject(XFA_HASHCODE_Config)); |
| 297 if (!pConfig) { | 251 if (!pConfig) { |
| 298 return; | 252 return; |
| 299 } | 253 } |
| 300 CXFA_Node* pAcrobat = pConfig->GetFirstChildByClass(XFA_Element::Acrobat); | 254 CXFA_Node* pAcrobat = pConfig->GetFirstChildByClass(XFA_Element::Acrobat); |
| 301 if (!pAcrobat) { | 255 if (!pAcrobat) { |
| (...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 489 | 443 |
| 490 return !!pExport->Export( | 444 return !!pExport->Export( |
| 491 pFile, pNode, 0, bsChecksum.GetLength() ? bsChecksum.c_str() : nullptr); | 445 pFile, pNode, 0, bsChecksum.GetLength() ? bsChecksum.c_str() : nullptr); |
| 492 } | 446 } |
| 493 | 447 |
| 494 FX_BOOL CXFA_FFDoc::ImportData(IFX_FileRead* pStream, FX_BOOL bXDP) { | 448 FX_BOOL CXFA_FFDoc::ImportData(IFX_FileRead* pStream, FX_BOOL bXDP) { |
| 495 std::unique_ptr<CXFA_DataImporter> importer( | 449 std::unique_ptr<CXFA_DataImporter> importer( |
| 496 new CXFA_DataImporter(m_pDocumentParser->GetDocument())); | 450 new CXFA_DataImporter(m_pDocumentParser->GetDocument())); |
| 497 return importer->ImportData(pStream); | 451 return importer->ImportData(pStream); |
| 498 } | 452 } |
| OLD | NEW |