blob: a5e79d50e54c6e26ff44e527a12763205d6ddfd0 [file] [log] [blame]
Dan Sinclair95bec802017-01-19 10:27:58 -05001// 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 XFA_FDE_CSS_CFDE_CSSSYNTAXPARSER_H_
8#define XFA_FDE_CSS_CFDE_CSSSYNTAXPARSER_H_
9
10#include <stack>
11
12#include "xfa/fde/css/cfde_csstextbuf.h"
13
14#define FDE_CSSSYNTAXCHECK_AllowCharset 1
15#define FDE_CSSSYNTAXCHECK_AllowImport 2
16
17enum class FDE_CSSSyntaxMode {
18 RuleSet,
19 Comment,
Dan Sinclair95bec802017-01-19 10:27:58 -050020 UnknownRule,
Dan Sinclair95bec802017-01-19 10:27:58 -050021 Selector,
22 PropertyName,
23 PropertyValue,
24};
25
26enum class FDE_CSSSyntaxStatus : uint8_t {
27 Error,
28 EOS,
29 None,
Dan Sinclair95bec802017-01-19 10:27:58 -050030 StyleRule,
Dan Sinclair95bec802017-01-19 10:27:58 -050031 Selector,
32 DeclOpen,
33 DeclClose,
34 PropertyName,
35 PropertyValue,
36};
37
38class CFDE_CSSSyntaxParser {
39 public:
40 CFDE_CSSSyntaxParser();
41 ~CFDE_CSSSyntaxParser();
42
Dan Sinclair812e96c2017-03-13 16:43:37 -040043 bool Init(const wchar_t* pBuffer,
Dan Sinclair95bec802017-01-19 10:27:58 -050044 int32_t iBufferSize,
45 int32_t iTextDatSize = 32,
46 bool bOnlyDeclaration = false);
47 FDE_CSSSyntaxStatus DoSyntaxParse();
Dan Sinclair21e954b2017-02-08 10:05:05 -050048 CFX_WideStringC GetCurrentString() const;
Dan Sinclair95bec802017-01-19 10:27:58 -050049
50 protected:
51 void Reset(bool bOnlyDeclaration);
52 void SwitchMode(FDE_CSSSyntaxMode eMode);
53 int32_t SwitchToComment();
54
55 bool RestoreMode();
Dan Sinclair812e96c2017-03-13 16:43:37 -040056 bool AppendChar(wchar_t wch);
Dan Sinclair95bec802017-01-19 10:27:58 -050057 int32_t SaveTextData();
58 bool IsCharsetEnabled() const {
59 return (m_dwCheck & FDE_CSSSYNTAXCHECK_AllowCharset) != 0;
60 }
61 void DisableCharset() { m_dwCheck = FDE_CSSSYNTAXCHECK_AllowImport; }
62 bool IsImportEnabled() const;
63 void DisableImport() { m_dwCheck = 0; }
64
65 CFDE_CSSTextBuf m_TextData;
66 CFDE_CSSTextBuf m_TextPlane;
Dan Sinclair21e954b2017-02-08 10:05:05 -050067 int32_t m_iTextDataLen;
Dan Sinclair95bec802017-01-19 10:27:58 -050068 uint32_t m_dwCheck;
69 FDE_CSSSyntaxMode m_eMode;
70 FDE_CSSSyntaxStatus m_eStatus;
71 std::stack<FDE_CSSSyntaxMode> m_ModeStack;
72};
73
74#endif // XFA_FDE_CSS_CFDE_CSSSYNTAXPARSER_H_