// Copyright 2017 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 CORE_FXCRT_CSS_CFX_CSSSYNTAXPARSER_H_
#define CORE_FXCRT_CSS_CFX_CSSSYNTAXPARSER_H_

#include <stack>

#include "core/fxcrt/css/cfx_cssinputtextbuf.h"
#include "core/fxcrt/css/cfx_cssoutputtextbuf.h"
#include "core/fxcrt/fx_string.h"

class CFX_CSSSyntaxParser {
 public:
  enum class Status : uint8_t {
    kError,
    kEOS,
    kNone,
    kStyleRule,
    kSelector,
    kDeclOpen,
    kDeclClose,
    kPropertyName,
    kPropertyValue,
  };

  explicit CFX_CSSSyntaxParser(WideStringView str);
  ~CFX_CSSSyntaxParser();

  void SetParseOnlyDeclarations();
  Status DoSyntaxParse();
  WideStringView GetCurrentString() const;

 private:
  enum class Mode : uint8_t {
    kRuleSet,
    kComment,
    kSelector,
    kPropertyName,
    kPropertyValue,
  };

  void SaveMode(Mode eMode);
  bool RestoreMode();

  bool m_bHasError = false;
  Mode m_eMode = Mode::kRuleSet;
  CFX_CSSOutputTextBuf m_Output;
  CFX_CSSInputTextBuf m_Input;
  std::stack<Mode> m_ModeStack;
};

#endif  // CORE_FXCRT_CSS_CFX_CSSSYNTAXPARSER_H_
