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

#ifndef XFA_FXFA_PARSER_CXFA_XML_PARSER_H_
#define XFA_FXFA_PARSER_CXFA_XML_PARSER_H_

#include <memory>

#include "xfa/fde/xml/fde_xml_imp.h"

class IFX_Stream;
class IFX_Pause;

class CXFA_XMLParser : public CFDE_XMLParser {
 public:
  CXFA_XMLParser(CFDE_XMLNode* pRoot, IFX_Stream* pStream);
  ~CXFA_XMLParser() override;

  // CFDE_XMLParser
  void Release() override;
  int32_t DoParser(IFX_Pause* pPause) override;

  FX_FILESIZE m_nStart[2];
  size_t m_nSize[2];
  FX_FILESIZE m_nElementStart;
  uint16_t m_dwCheckStatus;
  uint16_t m_dwCurrentCheckStatus;

 protected:
  CFDE_XMLNode* m_pRoot;
  IFX_Stream* m_pStream;
  std::unique_ptr<CFDE_XMLSyntaxParser, ReleaseDeleter<CFDE_XMLSyntaxParser>>
      m_pParser;
  CFDE_XMLNode* m_pParent;
  CFDE_XMLNode* m_pChild;
  CFX_StackTemplate<CFDE_XMLNode*> m_NodeStack;
  CFX_WideString m_ws1;
  CFX_WideString m_ws2;
  FDE_XmlSyntaxResult m_syntaxParserResult;
};

#endif  // XFA_FXFA_PARSER_CXFA_XML_PARSER_H_
