diff options
Diffstat (limited to 'xfa/fxfa/app')
-rw-r--r-- | xfa/fxfa/app/xfa_ffdoc.cpp | 72 | ||||
-rw-r--r-- | xfa/fxfa/app/xfa_ffwidgethandler.cpp | 7 |
2 files changed, 39 insertions, 40 deletions
diff --git a/xfa/fxfa/app/xfa_ffdoc.cpp b/xfa/fxfa/app/xfa_ffdoc.cpp index e85d1b76c5..6320cb9b2a 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); } diff --git a/xfa/fxfa/app/xfa_ffwidgethandler.cpp b/xfa/fxfa/app/xfa_ffwidgethandler.cpp index aaaf07ad66..b60b7fc0a2 100644 --- a/xfa/fxfa/app/xfa_ffwidgethandler.cpp +++ b/xfa/fxfa/app/xfa_ffwidgethandler.cpp @@ -15,7 +15,6 @@ #include "xfa/fxfa/include/xfa_ffdocview.h" #include "xfa/fxfa/include/xfa_ffwidget.h" #include "xfa/fxfa/parser/xfa_document_layout_imp.h" -#include "xfa/fxfa/parser/xfa_parser.h" #include "xfa/fxfa/parser/xfa_parser_imp.h" CXFA_FFWidgetHandler::CXFA_FFWidgetHandler(CXFA_FFDocView* pDocView) @@ -505,8 +504,8 @@ CXFA_Node* CXFA_FFWidgetHandler::CreateTemplateNode(XFA_Element eElement, CXFA_Node* pParent, CXFA_Node* pBefore) const { CXFA_Document* pXFADoc = GetXFADoc(); - CXFA_Node* pNewTemplateNode = pXFADoc->GetParser()->GetFactory()->CreateNode( - XFA_XDPPACKET_Template, eElement); + CXFA_Node* pNewTemplateNode = + pXFADoc->CreateNode(XFA_XDPPACKET_Template, eElement); if (pParent) pParent->InsertChild(pNewTemplateNode, pBefore); return pNewTemplateNode; @@ -545,7 +544,7 @@ CXFA_Node* CXFA_FFWidgetHandler::CreateValueNode(XFA_Element eValue, } CXFA_Document* CXFA_FFWidgetHandler::GetObjFactory() const { - return GetXFADoc()->GetParser()->GetFactory(); + return GetXFADoc(); } CXFA_Document* CXFA_FFWidgetHandler::GetXFADoc() const { |