blob: c17d84aef1ecf739f1817de5c5de1b67e259cbb1 [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
Lei Zhangf3024c32017-06-26 15:28:15 -070012#include "core/fxcrt/fx_string.h"
13#include "xfa/fde/css/cfde_cssexttextbuf.h"
Dan Sinclair95bec802017-01-19 10:27:58 -050014#include "xfa/fde/css/cfde_csstextbuf.h"
15
16#define FDE_CSSSYNTAXCHECK_AllowCharset 1
17#define FDE_CSSSYNTAXCHECK_AllowImport 2
18
19enum class FDE_CSSSyntaxMode {
20 RuleSet,
21 Comment,
Dan Sinclair95bec802017-01-19 10:27:58 -050022 UnknownRule,
Dan Sinclair95bec802017-01-19 10:27:58 -050023 Selector,
24 PropertyName,
25 PropertyValue,
26};
27
28enum class FDE_CSSSyntaxStatus : uint8_t {
29 Error,
30 EOS,
31 None,
Dan Sinclair95bec802017-01-19 10:27:58 -050032 StyleRule,
Dan Sinclair95bec802017-01-19 10:27:58 -050033 Selector,
34 DeclOpen,
35 DeclClose,
36 PropertyName,
37 PropertyValue,
38};
39
40class CFDE_CSSSyntaxParser {
41 public:
Lei Zhangf3024c32017-06-26 15:28:15 -070042 CFDE_CSSSyntaxParser(const wchar_t* pBuffer, int32_t iBufferSize);
43 CFDE_CSSSyntaxParser(const wchar_t* pBuffer,
44 int32_t iBufferSize,
45 int32_t iTextDatSize,
46 bool bOnlyDeclaration);
Dan Sinclair95bec802017-01-19 10:27:58 -050047 ~CFDE_CSSSyntaxParser();
48
Dan Sinclair95bec802017-01-19 10:27:58 -050049 FDE_CSSSyntaxStatus DoSyntaxParse();
Dan Sinclair21e954b2017-02-08 10:05:05 -050050 CFX_WideStringC GetCurrentString() const;
Dan Sinclair95bec802017-01-19 10:27:58 -050051
52 protected:
Dan Sinclair95bec802017-01-19 10:27:58 -050053 void SwitchMode(FDE_CSSSyntaxMode eMode);
54 int32_t SwitchToComment();
55
56 bool RestoreMode();
Dan Sinclair812e96c2017-03-13 16:43:37 -040057 bool AppendChar(wchar_t wch);
Dan Sinclair95bec802017-01-19 10:27:58 -050058 int32_t SaveTextData();
59 bool IsCharsetEnabled() const {
60 return (m_dwCheck & FDE_CSSSYNTAXCHECK_AllowCharset) != 0;
61 }
62 void DisableCharset() { m_dwCheck = FDE_CSSSYNTAXCHECK_AllowImport; }
63 bool IsImportEnabled() const;
64 void DisableImport() { m_dwCheck = 0; }
65
66 CFDE_CSSTextBuf m_TextData;
Lei Zhangf3024c32017-06-26 15:28:15 -070067 CFDE_CSSExtTextBuf m_TextPlane;
Dan Sinclair21e954b2017-02-08 10:05:05 -050068 int32_t m_iTextDataLen;
Dan Sinclair95bec802017-01-19 10:27:58 -050069 uint32_t m_dwCheck;
70 FDE_CSSSyntaxMode m_eMode;
71 FDE_CSSSyntaxStatus m_eStatus;
72 std::stack<FDE_CSSSyntaxMode> m_ModeStack;
73};
74
75#endif // XFA_FDE_CSS_CFDE_CSSSYNTAXPARSER_H_