blob: 1f66f30eedbd8ed4b1d195bf01579d3a087bb2da [file] [log] [blame] [edit]
// Copyright 2017 The PDFium Authors
// 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/widestring.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_