Home | History | Annotate | Download | only in css
      1 // Copyright 2017 PDFium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
      6 
      7 #ifndef CORE_FXCRT_CSS_CFX_CSSSYNTAXPARSER_H_
      8 #define CORE_FXCRT_CSS_CFX_CSSSYNTAXPARSER_H_
      9 
     10 #include <stack>
     11 
     12 #include "core/fxcrt/css/cfx_cssexttextbuf.h"
     13 #include "core/fxcrt/css/cfx_csstextbuf.h"
     14 #include "core/fxcrt/fx_string.h"
     15 
     16 #define CFX_CSSSYNTAXCHECK_AllowCharset 1
     17 #define CFX_CSSSYNTAXCHECK_AllowImport 2
     18 
     19 enum class CFX_CSSSyntaxMode {
     20   RuleSet,
     21   Comment,
     22   UnknownRule,
     23   Selector,
     24   PropertyName,
     25   PropertyValue,
     26 };
     27 
     28 enum class CFX_CSSSyntaxStatus : uint8_t {
     29   Error,
     30   EOS,
     31   None,
     32   StyleRule,
     33   Selector,
     34   DeclOpen,
     35   DeclClose,
     36   PropertyName,
     37   PropertyValue,
     38 };
     39 
     40 class CFX_CSSSyntaxParser {
     41  public:
     42   CFX_CSSSyntaxParser(const wchar_t* pBuffer, int32_t iBufferSize);
     43   CFX_CSSSyntaxParser(const wchar_t* pBuffer,
     44                       int32_t iBufferSize,
     45                       int32_t iTextDatSize,
     46                       bool bOnlyDeclaration);
     47   ~CFX_CSSSyntaxParser();
     48 
     49   CFX_CSSSyntaxStatus DoSyntaxParse();
     50   WideStringView GetCurrentString() const;
     51 
     52  protected:
     53   void SwitchMode(CFX_CSSSyntaxMode eMode);
     54   int32_t SwitchToComment();
     55 
     56   bool RestoreMode();
     57   bool AppendChar(wchar_t wch);
     58   int32_t SaveTextData();
     59   bool IsCharsetEnabled() const {
     60     return (m_dwCheck & CFX_CSSSYNTAXCHECK_AllowCharset) != 0;
     61   }
     62   void DisableCharset() { m_dwCheck = CFX_CSSSYNTAXCHECK_AllowImport; }
     63   bool IsImportEnabled() const;
     64   void DisableImport() { m_dwCheck = 0; }
     65 
     66   CFX_CSSTextBuf m_TextData;
     67   CFX_CSSExtTextBuf m_TextPlane;
     68   int32_t m_iTextDataLen;
     69   uint32_t m_dwCheck;
     70   CFX_CSSSyntaxMode m_eMode;
     71   CFX_CSSSyntaxStatus m_eStatus;
     72   std::stack<CFX_CSSSyntaxMode> m_ModeStack;
     73 };
     74 
     75 #endif  // CORE_FXCRT_CSS_CFX_CSSSYNTAXPARSER_H_
     76