| Index: xfa/fxfa/app/xfa_ffdoc.cpp
|
| diff --git a/xfa/fxfa/app/xfa_ffdoc.cpp b/xfa/fxfa/app/xfa_ffdoc.cpp
|
| index e85d1b76c52a6f2d2e6a15fd382615e9ab3b6aad..6320cb9b2a6a53b5436a8874d745122c68c9da17 100644
|
| --- a/xfa/fxfa/app/xfa_ffdoc.cpp
|
| +++ b/xfa/fxfa/app/xfa_ffdoc.cpp
|
| @@ -23,7 +23,6 @@
|
| #include "xfa/fxfa/include/xfa_fontmgr.h"
|
| #include "xfa/fxfa/parser/xfa_document.h"
|
| #include "xfa/fxfa/parser/xfa_document_serialize.h"
|
| -#include "xfa/fxfa/parser/xfa_parser.h"
|
| #include "xfa/fxfa/parser/xfa_parser_imp.h"
|
| #include "xfa/fxfa/parser/xfa_parser_imp.h"
|
|
|
| @@ -150,26 +149,29 @@ int32_t Base64DecodeW(const FX_WCHAR* pSrc, int32_t iSrcLen, uint8_t* pDst) {
|
|
|
| CXFA_FFDoc::CXFA_FFDoc(CXFA_FFApp* pApp, IXFA_DocProvider* pDocProvider)
|
| : m_pDocProvider(pDocProvider),
|
| - m_pDocument(nullptr),
|
| + m_pDocumentParser(nullptr),
|
| m_pStream(nullptr),
|
| m_pApp(pApp),
|
| m_pNotify(nullptr),
|
| m_pPDFDoc(nullptr),
|
| m_dwDocType(XFA_DOCTYPE_Static),
|
| m_bOwnStream(TRUE) {}
|
| +
|
| CXFA_FFDoc::~CXFA_FFDoc() {
|
| CloseDoc();
|
| }
|
| +
|
| uint32_t CXFA_FFDoc::GetDocType() {
|
| return m_dwDocType;
|
| }
|
| +
|
| int32_t CXFA_FFDoc::StartLoad() {
|
| - m_pNotify = new CXFA_FFNotify(this);
|
| - CXFA_DocumentParser* pDocParser = new CXFA_DocumentParser(m_pNotify);
|
| - int32_t iStatus = pDocParser->StartParse(m_pStream);
|
| - m_pDocument = pDocParser->GetDocument();
|
| + m_pNotify.reset(new CXFA_FFNotify(this));
|
| + m_pDocumentParser.reset(new CXFA_DocumentParser(m_pNotify.get()));
|
| + int32_t iStatus = m_pDocumentParser->StartParse(m_pStream);
|
| return iStatus;
|
| }
|
| +
|
| FX_BOOL XFA_GetPDFContentsFromPDFXML(CFDE_XMLNode* pPDFElement,
|
| uint8_t*& pByteBuffer,
|
| int32_t& iBufferSize) {
|
| @@ -234,9 +236,10 @@ void XFA_XPDPacket_MergeRootNode(CXFA_Node* pOriginRoot, CXFA_Node* pNewRoot) {
|
| }
|
| }
|
| int32_t CXFA_FFDoc::DoLoad(IFX_Pause* pPause) {
|
| - int32_t iStatus = m_pDocument->GetParser()->DoParse(pPause);
|
| + int32_t iStatus = m_pDocumentParser->DoParse(pPause);
|
| if (iStatus == XFA_PARSESTATUS_Done && !m_pPDFDoc) {
|
| - CXFA_Node* pPDFNode = ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_Pdf));
|
| + CXFA_Node* pPDFNode = ToNode(
|
| + m_pDocumentParser->GetDocument()->GetXFAObject(XFA_HASHCODE_Pdf));
|
| if (!pPDFNode) {
|
| return XFA_PARSESTATUS_SyntaxErr;
|
| }
|
| @@ -256,39 +259,40 @@ int32_t CXFA_FFDoc::DoLoad(IFX_Pause* pPause) {
|
| pXFAReader = GetDocProvider()->OpenLinkedFile(this, wsHref);
|
| }
|
| }
|
| - if (!pXFAReader) {
|
| + if (!pXFAReader)
|
| return XFA_PARSESTATUS_SyntaxErr;
|
| - }
|
| +
|
| CPDF_Document* pPDFDocument =
|
| GetDocProvider()->OpenPDF(this, pXFAReader, TRUE);
|
| ASSERT(!m_pPDFDoc);
|
| - if (!OpenDoc(pPDFDocument)) {
|
| + if (!OpenDoc(pPDFDocument))
|
| return XFA_PARSESTATUS_SyntaxErr;
|
| - }
|
| - IXFA_Parser* pParser = IXFA_Parser::Create(m_pDocument, TRUE);
|
| - if (!pParser) {
|
| +
|
| + CXFA_Document* doc = m_pDocumentParser->GetDocument();
|
| + std::unique_ptr<CXFA_SimpleParser> pParser(
|
| + new CXFA_SimpleParser(doc, true));
|
| + if (!pParser)
|
| return XFA_PARSESTATUS_SyntaxErr;
|
| - }
|
| +
|
| CXFA_Node* pRootNode = nullptr;
|
| if (pParser->StartParse(m_pStream) == XFA_PARSESTATUS_Ready &&
|
| pParser->DoParse(nullptr) == XFA_PARSESTATUS_Done) {
|
| pRootNode = pParser->GetRootNode();
|
| }
|
| - if (pRootNode && m_pDocument->GetRoot()) {
|
| - XFA_XPDPacket_MergeRootNode(m_pDocument->GetRoot(), pRootNode);
|
| + if (pRootNode && doc->GetRoot()) {
|
| + XFA_XPDPacket_MergeRootNode(doc->GetRoot(), pRootNode);
|
| iStatus = XFA_PARSESTATUS_Done;
|
| } else {
|
| iStatus = XFA_PARSESTATUS_StatusErr;
|
| }
|
| - pParser->Release();
|
| - pParser = nullptr;
|
| }
|
| return iStatus;
|
| }
|
| void CXFA_FFDoc::StopLoad() {
|
| m_pApp->GetXFAFontMgr()->LoadDocFonts(this);
|
| m_dwDocType = XFA_DOCTYPE_Static;
|
| - CXFA_Node* pConfig = ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_Config));
|
| + CXFA_Node* pConfig = ToNode(
|
| + m_pDocumentParser->GetDocument()->GetXFAObject(XFA_HASHCODE_Config));
|
| if (!pConfig) {
|
| return;
|
| }
|
| @@ -375,23 +379,19 @@ FX_BOOL CXFA_FFDoc::OpenDoc(CPDF_Document* pPDFDoc) {
|
| m_bOwnStream = TRUE;
|
| return TRUE;
|
| }
|
| +
|
| FX_BOOL CXFA_FFDoc::CloseDoc() {
|
| for (const auto& pair : m_TypeToDocViewMap)
|
| pair.second->RunDocClose();
|
|
|
| - if (m_pDocument)
|
| - m_pDocument->ClearLayoutData();
|
| + CXFA_Document* doc =
|
| + m_pDocumentParser ? m_pDocumentParser->GetDocument() : nullptr;
|
| + if (doc)
|
| + doc->ClearLayoutData();
|
|
|
| m_TypeToDocViewMap.clear();
|
|
|
| - if (m_pDocument) {
|
| - m_pDocument->GetParser()->Release();
|
| - m_pDocument = nullptr;
|
| - }
|
| -
|
| - delete m_pNotify;
|
| - m_pNotify = nullptr;
|
| -
|
| + m_pNotify.reset(nullptr);
|
| m_pApp->GetXFAFontMgr()->ReleaseDocFonts(this);
|
|
|
| if (m_dwDocType != XFA_DOCTYPE_XDP && m_pStream && m_bOwnStream) {
|
| @@ -474,11 +474,11 @@ CFX_DIBitmap* CXFA_FFDoc::GetPDFNamedImage(const CFX_WideStringC& wsName,
|
| bool CXFA_FFDoc::SavePackage(XFA_HashCode code,
|
| IFX_FileWrite* pFile,
|
| CXFA_ChecksumContext* pCSContext) {
|
| - std::unique_ptr<CXFA_DataExporter> pExport(
|
| - new CXFA_DataExporter(m_pDocument));
|
| - CXFA_Node* pNode = code == XFA_HASHCODE_Xfa
|
| - ? m_pDocument->GetRoot()
|
| - : ToNode(m_pDocument->GetXFAObject(code));
|
| + CXFA_Document* doc = m_pDocumentParser->GetDocument();
|
| +
|
| + std::unique_ptr<CXFA_DataExporter> pExport(new CXFA_DataExporter(doc));
|
| + CXFA_Node* pNode = code == XFA_HASHCODE_Xfa ? doc->GetRoot()
|
| + : ToNode(doc->GetXFAObject(code));
|
| if (!pNode)
|
| return !!pExport->Export(pFile);
|
|
|
| @@ -492,6 +492,6 @@ bool CXFA_FFDoc::SavePackage(XFA_HashCode code,
|
|
|
| FX_BOOL CXFA_FFDoc::ImportData(IFX_FileRead* pStream, FX_BOOL bXDP) {
|
| std::unique_ptr<CXFA_DataImporter> importer(
|
| - new CXFA_DataImporter(m_pDocument));
|
| + new CXFA_DataImporter(m_pDocumentParser->GetDocument()));
|
| return importer->ImportData(pStream);
|
| }
|
|
|