| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "xfa/fxfa/fm2js/xfa_lexer.h" | 7 #include "xfa/fxfa/fm2js/xfa_lexer.h" |
| 8 | 8 |
| 9 #include "core/fxcrt/fx_ext.h" | 9 #include "core/fxcrt/fx_ext.h" |
| 10 | 10 |
| 11 namespace { | 11 namespace { |
| 12 | 12 |
| 13 struct XFA_FMDChar { | 13 struct XFA_FMDChar { |
| 14 static const FX_WCHAR* inc(const FX_WCHAR*& p) { | 14 static const FX_WCHAR* inc(const FX_WCHAR*& p) { |
| 15 ++p; | 15 ++p; |
| 16 return p; | 16 return p; |
| 17 } | 17 } |
| 18 static const FX_WCHAR* dec(const FX_WCHAR*& p) { | 18 static const FX_WCHAR* dec(const FX_WCHAR*& p) { |
| 19 --p; | 19 --p; |
| 20 return p; | 20 return p; |
| 21 } | 21 } |
| 22 static uint16_t get(const FX_WCHAR* p) { return *p; } | 22 static uint16_t get(const FX_WCHAR* p) { return *p; } |
| 23 static FX_BOOL isWhiteSpace(const FX_WCHAR* p) { | 23 static bool isWhiteSpace(const FX_WCHAR* p) { |
| 24 return (*p) == 0x09 || (*p) == 0x0b || (*p) == 0x0c || (*p) == 0x20; | 24 return (*p) == 0x09 || (*p) == 0x0b || (*p) == 0x0c || (*p) == 0x20; |
| 25 } | 25 } |
| 26 static FX_BOOL isLineTerminator(const FX_WCHAR* p) { | 26 static bool isLineTerminator(const FX_WCHAR* p) { |
| 27 return *p == 0x0A || *p == 0x0D; | 27 return *p == 0x0A || *p == 0x0D; |
| 28 } | 28 } |
| 29 static FX_BOOL isBinary(const FX_WCHAR* p) { | 29 static bool isBinary(const FX_WCHAR* p) { return (*p) >= '0' && (*p) <= '1'; } |
| 30 return (*p) >= '0' && (*p) <= '1'; | 30 static bool isOctal(const FX_WCHAR* p) { return (*p) >= '0' && (*p) <= '7'; } |
| 31 } | 31 static bool isDigital(const FX_WCHAR* p) { |
| 32 static FX_BOOL isOctal(const FX_WCHAR* p) { | |
| 33 return (*p) >= '0' && (*p) <= '7'; | |
| 34 } | |
| 35 static FX_BOOL isDigital(const FX_WCHAR* p) { | |
| 36 return (*p) >= '0' && (*p) <= '9'; | 32 return (*p) >= '0' && (*p) <= '9'; |
| 37 } | 33 } |
| 38 static FX_BOOL isHex(const FX_WCHAR* p) { | 34 static bool isHex(const FX_WCHAR* p) { |
| 39 return isDigital(p) || ((*p) >= 'a' && (*p) <= 'f') || | 35 return isDigital(p) || ((*p) >= 'a' && (*p) <= 'f') || |
| 40 ((*p) >= 'A' && (*p) <= 'F'); | 36 ((*p) >= 'A' && (*p) <= 'F'); |
| 41 } | 37 } |
| 42 static FX_BOOL isAlpha(const FX_WCHAR* p) { | 38 static bool isAlpha(const FX_WCHAR* p) { |
| 43 return ((*p) <= 'z' && (*p) >= 'a') || ((*p) <= 'Z' && (*p) >= 'A'); | 39 return ((*p) <= 'z' && (*p) >= 'a') || ((*p) <= 'Z' && (*p) >= 'A'); |
| 44 } | 40 } |
| 45 static FX_BOOL isAvalid(const FX_WCHAR* p, FX_BOOL flag = 0); | 41 static bool isAvalid(const FX_WCHAR* p, bool flag = 0); |
| 46 static FX_BOOL string2number(const FX_WCHAR* s, | 42 static bool string2number(const FX_WCHAR* s, |
| 47 FX_DOUBLE* pValue, | 43 FX_DOUBLE* pValue, |
| 48 const FX_WCHAR*& pEnd); | 44 const FX_WCHAR*& pEnd); |
| 49 static FX_BOOL isUnicodeAlpha(uint16_t ch); | 45 static bool isUnicodeAlpha(uint16_t ch); |
| 50 }; | 46 }; |
| 51 | 47 |
| 52 inline FX_BOOL XFA_FMDChar::isAvalid(const FX_WCHAR* p, FX_BOOL flag) { | 48 inline bool XFA_FMDChar::isAvalid(const FX_WCHAR* p, bool flag) { |
| 53 if (*p == 0) { | 49 if (*p == 0) { |
| 54 return 1; | 50 return 1; |
| 55 } | 51 } |
| 56 if ((*p <= 0x0A && *p >= 0x09) || *p == 0x0D || | 52 if ((*p <= 0x0A && *p >= 0x09) || *p == 0x0D || |
| 57 (*p <= 0xd7ff && *p >= 0x20) || (*p <= 0xfffd && *p >= 0xe000)) { | 53 (*p <= 0xd7ff && *p >= 0x20) || (*p <= 0xfffd && *p >= 0xe000)) { |
| 58 return 1; | 54 return 1; |
| 59 } | 55 } |
| 60 if (!flag) { | 56 if (!flag) { |
| 61 if (*p == 0x0B || *p == 0x0C) { | 57 if (*p == 0x0B || *p == 0x0C) { |
| 62 return 1; | 58 return 1; |
| 63 } | 59 } |
| 64 } | 60 } |
| 65 return 0; | 61 return 0; |
| 66 } | 62 } |
| 67 | 63 |
| 68 inline FX_BOOL XFA_FMDChar::string2number(const FX_WCHAR* s, | 64 inline bool XFA_FMDChar::string2number(const FX_WCHAR* s, |
| 69 FX_DOUBLE* pValue, | 65 FX_DOUBLE* pValue, |
| 70 const FX_WCHAR*& pEnd) { | 66 const FX_WCHAR*& pEnd) { |
| 71 if (s) { | 67 if (s) { |
| 72 *pValue = wcstod((wchar_t*)s, (wchar_t**)&pEnd); | 68 *pValue = wcstod((wchar_t*)s, (wchar_t**)&pEnd); |
| 73 } | 69 } |
| 74 return 0; | 70 return 0; |
| 75 } | 71 } |
| 76 | 72 |
| 77 inline FX_BOOL XFA_FMDChar::isUnicodeAlpha(uint16_t ch) { | 73 inline bool XFA_FMDChar::isUnicodeAlpha(uint16_t ch) { |
| 78 if (ch == 0 || ch == 0x0A || ch == 0x0D || ch == 0x09 || ch == 0x0B || | 74 if (ch == 0 || ch == 0x0A || ch == 0x0D || ch == 0x09 || ch == 0x0B || |
| 79 ch == 0x0C || ch == 0x20 || ch == '.' || ch == ';' || ch == '"' || | 75 ch == 0x0C || ch == 0x20 || ch == '.' || ch == ';' || ch == '"' || |
| 80 ch == '=' || ch == '<' || ch == '>' || ch == ',' || ch == '(' || | 76 ch == '=' || ch == '<' || ch == '>' || ch == ',' || ch == '(' || |
| 81 ch == ')' || ch == ']' || ch == '[' || ch == '&' || ch == '|' || | 77 ch == ')' || ch == ']' || ch == '[' || ch == '&' || ch == '|' || |
| 82 ch == '+' || ch == '-' || ch == '*' || ch == '/') { | 78 ch == '+' || ch == '-' || ch == '*' || ch == '/') { |
| 83 return FALSE; | 79 return false; |
| 84 } | 80 } |
| 85 return TRUE; | 81 return true; |
| 86 } | 82 } |
| 87 | 83 |
| 88 const XFA_FMKeyword keyWords[] = { | 84 const XFA_FMKeyword keyWords[] = { |
| 89 {TOKand, 0x00000026, L"&"}, | 85 {TOKand, 0x00000026, L"&"}, |
| 90 {TOKlparen, 0x00000028, L"("}, | 86 {TOKlparen, 0x00000028, L"("}, |
| 91 {TOKrparen, 0x00000029, L")"}, | 87 {TOKrparen, 0x00000029, L")"}, |
| 92 {TOKmul, 0x0000002a, L"*"}, | 88 {TOKmul, 0x0000002a, L"*"}, |
| 93 {TOKplus, 0x0000002b, L"+"}, | 89 {TOKplus, 0x0000002b, L"+"}, |
| 94 {TOKcomma, 0x0000002c, L","}, | 90 {TOKcomma, 0x0000002c, L","}, |
| 95 {TOKminus, 0x0000002d, L"-"}, | 91 {TOKminus, 0x0000002d, L"-"}, |
| (...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 535 } | 531 } |
| 536 | 532 |
| 537 void CXFA_FMLexer::Error(const FX_WCHAR* msg, ...) { | 533 void CXFA_FMLexer::Error(const FX_WCHAR* msg, ...) { |
| 538 m_pErrorInfo->linenum = m_uCurrentLine; | 534 m_pErrorInfo->linenum = m_uCurrentLine; |
| 539 va_list ap; | 535 va_list ap; |
| 540 va_start(ap, msg); | 536 va_start(ap, msg); |
| 541 m_pErrorInfo->message.FormatV(msg, ap); | 537 m_pErrorInfo->message.FormatV(msg, ap); |
| 542 va_end(ap); | 538 va_end(ap); |
| 543 } | 539 } |
| 544 | 540 |
| 545 FX_BOOL CXFA_FMLexer::HasError() const { | 541 bool CXFA_FMLexer::HasError() const { |
| 546 if (m_pErrorInfo->message.IsEmpty()) { | 542 if (m_pErrorInfo->message.IsEmpty()) { |
| 547 return FALSE; | 543 return false; |
| 548 } | 544 } |
| 549 return TRUE; | 545 return true; |
| 550 } | 546 } |
| OLD | NEW |