// 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 #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 m_ModeStack; }; #endif // CORE_FXCRT_CSS_CFX_CSSSYNTAXPARSER_H_