// 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 IFGAS_Stream;
class IFX_Pause;

class CXFA_XMLParser : public IFDE_XMLParser {
 public:
  CXFA_XMLParser(CFDE_XMLNode* pRoot,
                 const CFX_RetainPtr<IFGAS_Stream>& pStream);
  ~CXFA_XMLParser() override;

  // IFDE_XMLParser
  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;
  CFX_RetainPtr<IFGAS_Stream> m_pStream;
  std::unique_ptr<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_
