| // 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_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(); |
| CFX_WideStringC 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<CFX_CSSSyntaxMode> m_ModeStack; |
| }; |
| |
| #endif // CORE_FXCRT_CSS_CFX_CSSSYNTAXPARSER_H_ |