Merge XFA to PDFium master at 4dc95e7 on 10/28/2014
[pdfium.git] / xfa / src / fxfa / src / fm2js / xfa_lexer.h
1 // Copyright 2014 PDFium Authors. All rights reserved.\r
2 // Use of this source code is governed by a BSD-style license that can be\r
3 // found in the LICENSE file.\r
4 \r
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com\r
6 \r
7 #ifndef _XFA_FM_LEXER_H\r
8 #define _XFA_FM_LEXER_H\r
9 enum XFA_FM_TOKEN {\r
10     TOKand, TOKlparen, TOKrparen, TOKmul, TOKplus, TOKcomma, TOKminus, TOKdot, TOKdiv, TOKlt,\r
11     TOKassign, TOKgt, TOKlbracket, TOKrbracket, TOKor, TOKdotscream, TOKdotstar, TOKdotdot,\r
12     TOKle, TOKne, TOKeq, TOKge,\r
13     TOKdo, TOKkseq, TOKksge, TOKksgt, TOKif, TOKin, TOKksle, TOKkslt, TOKksne, TOKksor, TOKnull,\r
14     TOKbreak, TOKksand, TOKend, TOKeof, TOKfor, TOKnan, TOKksnot, TOKvar, TOKthen, TOKelse, TOKexit,\r
15     TOKdownto, TOKreturn, TOKinfinity, TOKendwhile, TOKforeach, TOKendfunc, TOKelseif, TOKwhile,\r
16     TOKendfor, TOKthrow, TOKstep, TOKupto, TOKcontinue, TOKfunc, TOKendif,\r
17     TOKstar,\r
18     TOKidentifier, TOKunderscore, TOKdollar, TOKexclamation,\r
19     TOKcall,\r
20     TOKstring,\r
21     TOKnumber,\r
22     TOKreserver\r
23 };\r
24 struct XFA_FMKeyword {\r
25     XFA_FM_TOKEN        m_type;\r
26     FX_UINT32           m_uHash;\r
27     FX_LPCWSTR          m_keword;\r
28 };\r
29 FX_LPCWSTR XFA_FM_KeywordToString(XFA_FM_TOKEN op);\r
30 class CXFA_FMToken : public CFX_Object\r
31 {\r
32 public:\r
33     CXFA_FMToken();\r
34     CXFA_FMToken(FX_DWORD uLineNum);\r
35     ~CXFA_FMToken();\r
36     CFX_WideStringC m_wstring;\r
37     XFA_FM_TOKEN        m_type;\r
38     FX_DWORD            m_uLinenum;\r
39     CXFA_FMToken*       m_pNext;\r
40 };\r
41 class CXFA_FMLexer : public CFX_Object\r
42 {\r
43 public:\r
44     CXFA_FMLexer(FX_WSTR wsFormcalc, CXFA_FMErrorInfo *pErrorInfo);\r
45     ~CXFA_FMLexer();\r
46     CXFA_FMToken*       NextToken();\r
47     FX_DWORD            Number(CXFA_FMToken *t, FX_LPCWSTR p,  FX_LPCWSTR &pEnd);\r
48     FX_DWORD            String(CXFA_FMToken *t, FX_LPCWSTR p, FX_LPCWSTR &pEnd);\r
49     FX_DWORD            Identifiers(CXFA_FMToken *t, FX_LPCWSTR p, FX_LPCWSTR &pEnd);\r
50     void                        Comment(FX_LPCWSTR p, FX_LPCWSTR &pEnd);\r
51     XFA_FM_TOKEN        IsKeyword(FX_WSTR p);\r
52     void                        SetCurrentLine(FX_DWORD line)\r
53     {\r
54         m_uCurrentLine = line;\r
55     }\r
56     void                        SetToken(CXFA_FMToken *pToken)\r
57     {\r
58         if (m_pToken) {\r
59             delete m_pToken;\r
60         }\r
61         m_pToken = pToken;\r
62     }\r
63     FX_LPCWSTR          SavePos()\r
64     {\r
65         return m_ptr;\r
66     }\r
67     void                        RestorePos(FX_LPCWSTR pPos)\r
68     {\r
69         m_ptr = pPos;\r
70     }\r
71     void                        Error(XFA_FM_ERRMSG msg, ...);\r
72     FX_BOOL                     HasError() const;\r
73 protected:\r
74     CXFA_FMToken*       Scan();\r
75     FX_LPCWSTR          m_pScript;\r
76     FX_LPCWSTR          m_ptr;\r
77     FX_STRSIZE          m_uLength;\r
78     FX_DWORD            m_uCurrentLine;\r
79     CXFA_FMToken*       m_pToken;\r
80     CXFA_FMErrorInfo* m_pErrorInfo;\r
81 };\r
82 #endif\r