| // Copyright 2014 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 XFA_FXFA_FM2JS_CXFA_FMLEXER_H_ |
| #define XFA_FXFA_FM2JS_CXFA_FMLEXER_H_ |
| |
| #include "core/fxcrt/fx_string.h" |
| #include "v8/include/cppgc/macros.h" |
| |
| enum XFA_FM_TOKEN { |
| TOKand, |
| TOKlparen, |
| TOKrparen, |
| TOKmul, |
| TOKplus, |
| TOKcomma, |
| TOKminus, |
| TOKdot, |
| TOKdiv, |
| TOKlt, |
| TOKassign, |
| TOKgt, |
| TOKlbracket, |
| TOKrbracket, |
| TOKor, |
| TOKdotscream, |
| TOKdotstar, |
| TOKdotdot, |
| TOKle, |
| TOKne, |
| TOKeq, |
| TOKge, |
| TOKdo, |
| TOKkseq, |
| TOKksge, |
| TOKksgt, |
| TOKif, |
| TOKin, |
| TOKksle, |
| TOKkslt, |
| TOKksne, |
| TOKksor, |
| TOKnull, |
| TOKbreak, |
| TOKksand, |
| TOKend, |
| TOKeof, |
| TOKfor, |
| TOKnan, |
| TOKksnot, |
| TOKvar, |
| TOKthen, |
| TOKelse, |
| TOKexit, |
| TOKdownto, |
| TOKreturn, |
| TOKinfinity, |
| TOKendwhile, |
| TOKforeach, |
| TOKendfunc, |
| TOKelseif, |
| TOKwhile, |
| TOKendfor, |
| TOKthrow, |
| TOKstep, |
| TOKupto, |
| TOKcontinue, |
| TOKfunc, |
| TOKendif, |
| TOKstar, |
| TOKidentifier, |
| TOKunderscore, |
| TOKdollar, |
| TOKexclamation, |
| TOKcall, |
| TOKstring, |
| TOKnumber, |
| TOKreserver |
| }; |
| |
| class CXFA_FMToken { |
| public: |
| CXFA_FMToken(); |
| explicit CXFA_FMToken(XFA_FM_TOKEN token); |
| CXFA_FMToken(const CXFA_FMToken&); |
| ~CXFA_FMToken(); |
| |
| #ifndef NDEBUG |
| WideString ToDebugString() const; |
| #endif // NDEBUG |
| |
| WideStringView m_string; |
| XFA_FM_TOKEN m_type; |
| }; |
| |
| class CXFA_FMLexer { |
| CPPGC_STACK_ALLOCATED(); // Raw pointers allowed. |
| |
| public: |
| explicit CXFA_FMLexer(WideStringView wsFormcalc); |
| ~CXFA_FMLexer(); |
| |
| CXFA_FMToken NextToken(); |
| bool IsComplete() const { return m_nCursor >= m_spInput.size(); } |
| |
| private: |
| CXFA_FMToken AdvanceForNumber(); |
| CXFA_FMToken AdvanceForString(); |
| CXFA_FMToken AdvanceForIdentifier(); |
| void AdvanceForComment(); |
| |
| void RaiseError() { m_bLexerError = true; } |
| |
| pdfium::span<const wchar_t> m_spInput; |
| size_t m_nCursor = 0; |
| bool m_bLexerError = false; |
| }; |
| |
| #endif // XFA_FXFA_FM2JS_CXFA_FMLEXER_H_ |