summaryrefslogtreecommitdiff
path: root/xfa/src/fxfa/src/fm2js/xfa_lexer.h
blob: a3ab6253a62e359f24b0a1993fdf194147ca5892 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
// 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_FM_LEXER_H
#define _XFA_FM_LEXER_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
};
struct XFA_FMKeyword {
    XFA_FM_TOKEN	m_type;
    uint32_t		m_uHash;
    const FX_WCHAR*		m_keword;
};
const FX_WCHAR* XFA_FM_KeywordToString(XFA_FM_TOKEN op);
class CXFA_FMToken
{
public:
    CXFA_FMToken();
    CXFA_FMToken(FX_DWORD uLineNum);
    ~CXFA_FMToken();
    CFX_WideStringC m_wstring;
    XFA_FM_TOKEN	m_type;
    FX_DWORD		m_uLinenum;
    CXFA_FMToken*	m_pNext;
};
class CXFA_FMLexer
{
public:
    CXFA_FMLexer(const CFX_WideStringC& wsFormcalc, CXFA_FMErrorInfo *pErrorInfo);
    ~CXFA_FMLexer();
    CXFA_FMToken*	NextToken();
    FX_DWORD		Number(CXFA_FMToken *t, const FX_WCHAR* p,  const FX_WCHAR* &pEnd);
    FX_DWORD		String(CXFA_FMToken *t, const FX_WCHAR* p, const FX_WCHAR* &pEnd);
    FX_DWORD		Identifiers(CXFA_FMToken *t, const FX_WCHAR* p, const FX_WCHAR* &pEnd);
    void			Comment(const FX_WCHAR* p, const FX_WCHAR* &pEnd);
    XFA_FM_TOKEN	IsKeyword(const CFX_WideStringC& p);
    void			SetCurrentLine(FX_DWORD line)
    {
        m_uCurrentLine = line;
    }
    void			SetToken(CXFA_FMToken *pToken)
    {
        if (m_pToken) {
            delete m_pToken;
        }
        m_pToken = pToken;
    }
    const FX_WCHAR*		SavePos()
    {
        return m_ptr;
    }
    void			RestorePos(const FX_WCHAR* pPos)
    {
        m_ptr = pPos;
    }
    void			Error(XFA_FM_ERRMSG msg, ...);
    FX_BOOL			HasError() const;
protected:
    CXFA_FMToken*	Scan();
    const FX_WCHAR*		m_pScript;
    const FX_WCHAR*		m_ptr;
    FX_STRSIZE		m_uLength;
    FX_DWORD		m_uCurrentLine;
    CXFA_FMToken*	m_pToken;
    CXFA_FMErrorInfo* m_pErrorInfo;
};
#endif