// Copyright 2014 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

#ifndef XFA_FXFA_PARSER_XFA_PARSER_H_
#define XFA_FXFA_PARSER_XFA_PARSER_H_

#include "xfa/fxfa/parser/xfa_document.h"

class CFDE_XMLDoc;

class IXFA_Parser {
 public:
  static IXFA_Parser* Create(CXFA_Document* pFactory,
                             FX_BOOL bDocumentParser = FALSE);
  virtual ~IXFA_Parser() {}
  virtual void Release() = 0;
  virtual int32_t StartParse(IFX_FileRead* pStream,
                             XFA_XDPPACKET ePacketID = XFA_XDPPACKET_XDP) = 0;
  virtual int32_t DoParse(IFX_Pause* pPause = NULL) = 0;
  virtual int32_t ParseXMLData(const CFX_WideString& wsXML,
                               CFDE_XMLNode*& pXMLNode,
                               IFX_Pause* pPause = NULL) = 0;
  virtual void ConstructXFANode(CXFA_Node* pXFANode,
                                CFDE_XMLNode* pXMLNode) = 0;
  virtual CXFA_Document* GetFactory() const = 0;
  virtual CXFA_Node* GetRootNode() const = 0;
  virtual CFDE_XMLDoc* GetXMLDoc() const = 0;
  virtual void CloseParser() = 0;
};

#endif  // XFA_FXFA_PARSER_XFA_PARSER_H_
