| OLD | NEW |
| (Empty) |
| 1 // Copyright 2014 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_SRC_FXFA_FM2JS_XFA_LEXER_H_ | |
| 8 #define XFA_SRC_FXFA_FM2JS_XFA_LEXER_H_ | |
| 9 | |
| 10 #include <memory> | |
| 11 | |
| 12 #include "core/include/fxcrt/fx_string.h" | |
| 13 #include "xfa/src/fxfa/fm2js/xfa_error.h" | |
| 14 | |
| 15 enum XFA_FM_TOKEN { | |
| 16 TOKand, | |
| 17 TOKlparen, | |
| 18 TOKrparen, | |
| 19 TOKmul, | |
| 20 TOKplus, | |
| 21 TOKcomma, | |
| 22 TOKminus, | |
| 23 TOKdot, | |
| 24 TOKdiv, | |
| 25 TOKlt, | |
| 26 TOKassign, | |
| 27 TOKgt, | |
| 28 TOKlbracket, | |
| 29 TOKrbracket, | |
| 30 TOKor, | |
| 31 TOKdotscream, | |
| 32 TOKdotstar, | |
| 33 TOKdotdot, | |
| 34 TOKle, | |
| 35 TOKne, | |
| 36 TOKeq, | |
| 37 TOKge, | |
| 38 TOKdo, | |
| 39 TOKkseq, | |
| 40 TOKksge, | |
| 41 TOKksgt, | |
| 42 TOKif, | |
| 43 TOKin, | |
| 44 TOKksle, | |
| 45 TOKkslt, | |
| 46 TOKksne, | |
| 47 TOKksor, | |
| 48 TOKnull, | |
| 49 TOKbreak, | |
| 50 TOKksand, | |
| 51 TOKend, | |
| 52 TOKeof, | |
| 53 TOKfor, | |
| 54 TOKnan, | |
| 55 TOKksnot, | |
| 56 TOKvar, | |
| 57 TOKthen, | |
| 58 TOKelse, | |
| 59 TOKexit, | |
| 60 TOKdownto, | |
| 61 TOKreturn, | |
| 62 TOKinfinity, | |
| 63 TOKendwhile, | |
| 64 TOKforeach, | |
| 65 TOKendfunc, | |
| 66 TOKelseif, | |
| 67 TOKwhile, | |
| 68 TOKendfor, | |
| 69 TOKthrow, | |
| 70 TOKstep, | |
| 71 TOKupto, | |
| 72 TOKcontinue, | |
| 73 TOKfunc, | |
| 74 TOKendif, | |
| 75 TOKstar, | |
| 76 TOKidentifier, | |
| 77 TOKunderscore, | |
| 78 TOKdollar, | |
| 79 TOKexclamation, | |
| 80 TOKcall, | |
| 81 TOKstring, | |
| 82 TOKnumber, | |
| 83 TOKreserver | |
| 84 }; | |
| 85 | |
| 86 struct XFA_FMKeyword { | |
| 87 XFA_FM_TOKEN m_type; | |
| 88 uint32_t m_uHash; | |
| 89 const FX_WCHAR* m_keyword; | |
| 90 }; | |
| 91 | |
| 92 const FX_WCHAR* XFA_FM_KeywordToString(XFA_FM_TOKEN op); | |
| 93 | |
| 94 class CXFA_FMToken { | |
| 95 public: | |
| 96 CXFA_FMToken(); | |
| 97 explicit CXFA_FMToken(FX_DWORD uLineNum); | |
| 98 | |
| 99 CFX_WideStringC m_wstring; | |
| 100 XFA_FM_TOKEN m_type; | |
| 101 FX_DWORD m_uLinenum; | |
| 102 }; | |
| 103 | |
| 104 class CXFA_FMLexer { | |
| 105 public: | |
| 106 CXFA_FMLexer(const CFX_WideStringC& wsFormcalc, CXFA_FMErrorInfo* pErrorInfo); | |
| 107 CXFA_FMToken* NextToken(); | |
| 108 FX_DWORD Number(CXFA_FMToken* t, const FX_WCHAR* p, const FX_WCHAR*& pEnd); | |
| 109 FX_DWORD String(CXFA_FMToken* t, const FX_WCHAR* p, const FX_WCHAR*& pEnd); | |
| 110 FX_DWORD Identifiers(CXFA_FMToken* t, | |
| 111 const FX_WCHAR* p, | |
| 112 const FX_WCHAR*& pEnd); | |
| 113 void Comment(const FX_WCHAR* p, const FX_WCHAR*& pEnd); | |
| 114 XFA_FM_TOKEN IsKeyword(const CFX_WideStringC& p); | |
| 115 void SetCurrentLine(FX_DWORD line) { m_uCurrentLine = line; } | |
| 116 void SetToken(CXFA_FMToken* pToken) { | |
| 117 if (m_pToken.get() != pToken) | |
| 118 m_pToken.reset(pToken); | |
| 119 } | |
| 120 const FX_WCHAR* SavePos() { return m_ptr; } | |
| 121 void RestorePos(const FX_WCHAR* pPos) { m_ptr = pPos; } | |
| 122 void Error(XFA_FM_ERRMSG msg, ...); | |
| 123 FX_BOOL HasError() const; | |
| 124 | |
| 125 protected: | |
| 126 CXFA_FMToken* Scan(); | |
| 127 | |
| 128 const FX_WCHAR* m_ptr; | |
| 129 FX_DWORD m_uCurrentLine; | |
| 130 std::unique_ptr<CXFA_FMToken> m_pToken; | |
| 131 CXFA_FMErrorInfo* m_pErrorInfo; | |
| 132 }; | |
| 133 | |
| 134 #endif // XFA_SRC_FXFA_FM2JS_XFA_LEXER_H_ | |
| OLD | NEW |