// 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 #include "core/fxcrt/css/cfx_cssexttextbuf.h" #include "core/fxcrt/css/cfx_csstextbuf.h" #include "core/fxcrt/fx_string.h" #define CFX_CSSSYNTAXCHECK_AllowCharset 1 #define CFX_CSSSYNTAXCHECK_AllowImport 2 enum class CFX_CSSSyntaxMode { RuleSet, Comment, UnknownRule, Selector, PropertyName, PropertyValue, }; enum class CFX_CSSSyntaxStatus : uint8_t { Error, EOS, None, StyleRule, Selector, DeclOpen, DeclClose, PropertyName, PropertyValue, }; class CFX_CSSSyntaxParser { public: CFX_CSSSyntaxParser(const wchar_t* pBuffer, int32_t iBufferSize); CFX_CSSSyntaxParser(const wchar_t* pBuffer, int32_t iBufferSize, int32_t iTextDatSize, bool bOnlyDeclaration); ~CFX_CSSSyntaxParser(); CFX_CSSSyntaxStatus DoSyntaxParse(); WideStringView GetCurrentString() const; protected: void SwitchMode(CFX_CSSSyntaxMode eMode); int32_t SwitchToComment(); bool RestoreMode(); bool AppendChar(wchar_t wch); int32_t SaveTextData(); bool IsCharsetEnabled() const { return (m_dwCheck & CFX_CSSSYNTAXCHECK_AllowCharset) != 0; } void DisableCharset() { m_dwCheck = CFX_CSSSYNTAXCHECK_AllowImport; } bool IsImportEnabled() const; void DisableImport() { m_dwCheck = 0; } CFX_CSSTextBuf m_TextData; CFX_CSSExtTextBuf m_TextPlane; int32_t m_iTextDataLen; uint32_t m_dwCheck; CFX_CSSSyntaxMode m_eMode; CFX_CSSSyntaxStatus m_eStatus; std::stack m_ModeStack; }; #endif // CORE_FXCRT_CSS_CFX_CSSSYNTAXPARSER_H_