| 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/include/fx_ext.h" | 9 #include "core/fxcrt/include/fx_ext.h" |
| 10 | 10 |
| (...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 170 CXFA_FMToken* CXFA_FMLexer::NextToken() { | 170 CXFA_FMToken* CXFA_FMLexer::NextToken() { |
| 171 m_pToken.reset(Scan()); | 171 m_pToken.reset(Scan()); |
| 172 return m_pToken.get(); | 172 return m_pToken.get(); |
| 173 } | 173 } |
| 174 | 174 |
| 175 CXFA_FMToken* CXFA_FMLexer::Scan() { | 175 CXFA_FMToken* CXFA_FMLexer::Scan() { |
| 176 uint16_t ch = 0; | 176 uint16_t ch = 0; |
| 177 CXFA_FMToken* p = new CXFA_FMToken(m_uCurrentLine); | 177 CXFA_FMToken* p = new CXFA_FMToken(m_uCurrentLine); |
| 178 if (!XFA_FMDChar::isAvalid(m_ptr)) { | 178 if (!XFA_FMDChar::isAvalid(m_ptr)) { |
| 179 ch = XFA_FMDChar::get(m_ptr); | 179 ch = XFA_FMDChar::get(m_ptr); |
| 180 Error(FMERR_UNSUPPORTED_CHAR, ch); | 180 Error(kFMErrUnsupportedChar, ch); |
| 181 return p; | 181 return p; |
| 182 } | 182 } |
| 183 int iRet = 0; | 183 int iRet = 0; |
| 184 while (1) { | 184 while (1) { |
| 185 if (!XFA_FMDChar::isAvalid(m_ptr)) { | 185 if (!XFA_FMDChar::isAvalid(m_ptr)) { |
| 186 ch = XFA_FMDChar::get(m_ptr); | 186 ch = XFA_FMDChar::get(m_ptr); |
| 187 Error(FMERR_UNSUPPORTED_CHAR, ch); | 187 Error(kFMErrUnsupportedChar, ch); |
| 188 return p; | 188 return p; |
| 189 } | 189 } |
| 190 ch = XFA_FMDChar::get(m_ptr); | 190 ch = XFA_FMDChar::get(m_ptr); |
| 191 switch (ch) { | 191 switch (ch) { |
| 192 case 0: | 192 case 0: |
| 193 p->m_type = TOKeof; | 193 p->m_type = TOKeof; |
| 194 return p; | 194 return p; |
| 195 case 0x0A: | 195 case 0x0A: |
| 196 ++m_uCurrentLine; | 196 ++m_uCurrentLine; |
| 197 p->m_uLinenum = m_uCurrentLine; | 197 p->m_uLinenum = m_uCurrentLine; |
| (...skipping 22 matching lines...) Expand all Loading... |
| 220 case '5': | 220 case '5': |
| 221 case '6': | 221 case '6': |
| 222 case '7': | 222 case '7': |
| 223 case '8': | 223 case '8': |
| 224 case '9': { | 224 case '9': { |
| 225 p->m_type = TOKnumber; | 225 p->m_type = TOKnumber; |
| 226 const FX_WCHAR* pTemp = 0; | 226 const FX_WCHAR* pTemp = 0; |
| 227 iRet = Number(p, m_ptr, pTemp); | 227 iRet = Number(p, m_ptr, pTemp); |
| 228 m_ptr = pTemp; | 228 m_ptr = pTemp; |
| 229 if (iRet) { | 229 if (iRet) { |
| 230 Error(FMERR_BAD_SUFFIX_NUMBER); | 230 Error(kFMErrBadSuffixNumber); |
| 231 return p; | 231 return p; |
| 232 } | 232 } |
| 233 } | 233 } |
| 234 return p; | 234 return p; |
| 235 case '=': | 235 case '=': |
| 236 XFA_FMDChar::inc(m_ptr); | 236 XFA_FMDChar::inc(m_ptr); |
| 237 if (XFA_FMDChar::isAvalid(m_ptr)) { | 237 if (XFA_FMDChar::isAvalid(m_ptr)) { |
| 238 ch = XFA_FMDChar::get(m_ptr); | 238 ch = XFA_FMDChar::get(m_ptr); |
| 239 if (ch == '=') { | 239 if (ch == '=') { |
| 240 p->m_type = TOKeq; | 240 p->m_type = TOKeq; |
| 241 XFA_FMDChar::inc(m_ptr); | 241 XFA_FMDChar::inc(m_ptr); |
| 242 return p; | 242 return p; |
| 243 } else { | 243 } else { |
| 244 p->m_type = TOKassign; | 244 p->m_type = TOKassign; |
| 245 return p; | 245 return p; |
| 246 } | 246 } |
| 247 } else { | 247 } else { |
| 248 ch = XFA_FMDChar::get(m_ptr); | 248 ch = XFA_FMDChar::get(m_ptr); |
| 249 Error(FMERR_UNSUPPORTED_CHAR, ch); | 249 Error(kFMErrUnsupportedChar, ch); |
| 250 return p; | 250 return p; |
| 251 } | 251 } |
| 252 break; | 252 break; |
| 253 case '<': | 253 case '<': |
| 254 XFA_FMDChar::inc(m_ptr); | 254 XFA_FMDChar::inc(m_ptr); |
| 255 if (XFA_FMDChar::isAvalid(m_ptr)) { | 255 if (XFA_FMDChar::isAvalid(m_ptr)) { |
| 256 ch = XFA_FMDChar::get(m_ptr); | 256 ch = XFA_FMDChar::get(m_ptr); |
| 257 if (ch == '=') { | 257 if (ch == '=') { |
| 258 p->m_type = TOKle; | 258 p->m_type = TOKle; |
| 259 XFA_FMDChar::inc(m_ptr); | 259 XFA_FMDChar::inc(m_ptr); |
| 260 return p; | 260 return p; |
| 261 } else if (ch == '>') { | 261 } else if (ch == '>') { |
| 262 p->m_type = TOKne; | 262 p->m_type = TOKne; |
| 263 XFA_FMDChar::inc(m_ptr); | 263 XFA_FMDChar::inc(m_ptr); |
| 264 return p; | 264 return p; |
| 265 } else { | 265 } else { |
| 266 p->m_type = TOKlt; | 266 p->m_type = TOKlt; |
| 267 return p; | 267 return p; |
| 268 } | 268 } |
| 269 } else { | 269 } else { |
| 270 ch = XFA_FMDChar::get(m_ptr); | 270 ch = XFA_FMDChar::get(m_ptr); |
| 271 Error(FMERR_UNSUPPORTED_CHAR, ch); | 271 Error(kFMErrUnsupportedChar, ch); |
| 272 return p; | 272 return p; |
| 273 } | 273 } |
| 274 break; | 274 break; |
| 275 case '>': | 275 case '>': |
| 276 XFA_FMDChar::inc(m_ptr); | 276 XFA_FMDChar::inc(m_ptr); |
| 277 if (XFA_FMDChar::isAvalid(m_ptr)) { | 277 if (XFA_FMDChar::isAvalid(m_ptr)) { |
| 278 ch = XFA_FMDChar::get(m_ptr); | 278 ch = XFA_FMDChar::get(m_ptr); |
| 279 if (ch == '=') { | 279 if (ch == '=') { |
| 280 p->m_type = TOKge; | 280 p->m_type = TOKge; |
| 281 XFA_FMDChar::inc(m_ptr); | 281 XFA_FMDChar::inc(m_ptr); |
| 282 return p; | 282 return p; |
| 283 } else { | 283 } else { |
| 284 p->m_type = TOKgt; | 284 p->m_type = TOKgt; |
| 285 return p; | 285 return p; |
| 286 } | 286 } |
| 287 } else { | 287 } else { |
| 288 ch = XFA_FMDChar::get(m_ptr); | 288 ch = XFA_FMDChar::get(m_ptr); |
| 289 Error(FMERR_UNSUPPORTED_CHAR, ch); | 289 Error(kFMErrUnsupportedChar, ch); |
| 290 return p; | 290 return p; |
| 291 } | 291 } |
| 292 break; | 292 break; |
| 293 case ',': | 293 case ',': |
| 294 p->m_type = TOKcomma; | 294 p->m_type = TOKcomma; |
| 295 XFA_FMDChar::inc(m_ptr); | 295 XFA_FMDChar::inc(m_ptr); |
| 296 return p; | 296 return p; |
| 297 case '(': | 297 case '(': |
| 298 p->m_type = TOKlparen; | 298 p->m_type = TOKlparen; |
| 299 XFA_FMDChar::inc(m_ptr); | 299 XFA_FMDChar::inc(m_ptr); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 338 const FX_WCHAR* pTemp = 0; | 338 const FX_WCHAR* pTemp = 0; |
| 339 Comment(m_ptr, pTemp); | 339 Comment(m_ptr, pTemp); |
| 340 m_ptr = pTemp; | 340 m_ptr = pTemp; |
| 341 break; | 341 break; |
| 342 } else { | 342 } else { |
| 343 p->m_type = TOKdiv; | 343 p->m_type = TOKdiv; |
| 344 return p; | 344 return p; |
| 345 } | 345 } |
| 346 } else { | 346 } else { |
| 347 ch = XFA_FMDChar::get(m_ptr); | 347 ch = XFA_FMDChar::get(m_ptr); |
| 348 Error(FMERR_UNSUPPORTED_CHAR, ch); | 348 Error(kFMErrUnsupportedChar, ch); |
| 349 return p; | 349 return p; |
| 350 } | 350 } |
| 351 break; | 351 break; |
| 352 case '.': | 352 case '.': |
| 353 XFA_FMDChar::inc(m_ptr); | 353 XFA_FMDChar::inc(m_ptr); |
| 354 if (XFA_FMDChar::isAvalid(m_ptr)) { | 354 if (XFA_FMDChar::isAvalid(m_ptr)) { |
| 355 ch = XFA_FMDChar::get(m_ptr); | 355 ch = XFA_FMDChar::get(m_ptr); |
| 356 if (ch == '.') { | 356 if (ch == '.') { |
| 357 p->m_type = TOKdotdot; | 357 p->m_type = TOKdotdot; |
| 358 XFA_FMDChar::inc(m_ptr); | 358 XFA_FMDChar::inc(m_ptr); |
| 359 return p; | 359 return p; |
| 360 } else if (ch == '*') { | 360 } else if (ch == '*') { |
| 361 p->m_type = TOKdotstar; | 361 p->m_type = TOKdotstar; |
| 362 XFA_FMDChar::inc(m_ptr); | 362 XFA_FMDChar::inc(m_ptr); |
| 363 return p; | 363 return p; |
| 364 } else if (ch == '#') { | 364 } else if (ch == '#') { |
| 365 p->m_type = TOKdotscream; | 365 p->m_type = TOKdotscream; |
| 366 XFA_FMDChar::inc(m_ptr); | 366 XFA_FMDChar::inc(m_ptr); |
| 367 return p; | 367 return p; |
| 368 } else if (ch <= '9' && ch >= '0') { | 368 } else if (ch <= '9' && ch >= '0') { |
| 369 p->m_type = TOKnumber; | 369 p->m_type = TOKnumber; |
| 370 const FX_WCHAR* pTemp = 0; | 370 const FX_WCHAR* pTemp = 0; |
| 371 XFA_FMDChar::dec(m_ptr); | 371 XFA_FMDChar::dec(m_ptr); |
| 372 iRet = Number(p, m_ptr, pTemp); | 372 iRet = Number(p, m_ptr, pTemp); |
| 373 m_ptr = pTemp; | 373 m_ptr = pTemp; |
| 374 if (iRet) { | 374 if (iRet) { |
| 375 Error(FMERR_BAD_SUFFIX_NUMBER); | 375 Error(kFMErrBadSuffixNumber); |
| 376 } | 376 } |
| 377 return p; | 377 return p; |
| 378 } else { | 378 } else { |
| 379 p->m_type = TOKdot; | 379 p->m_type = TOKdot; |
| 380 return p; | 380 return p; |
| 381 } | 381 } |
| 382 } else { | 382 } else { |
| 383 ch = XFA_FMDChar::get(m_ptr); | 383 ch = XFA_FMDChar::get(m_ptr); |
| 384 Error(FMERR_UNSUPPORTED_CHAR, ch); | 384 Error(kFMErrUnsupportedChar, ch); |
| 385 return p; | 385 return p; |
| 386 } | 386 } |
| 387 case 0x09: | 387 case 0x09: |
| 388 case 0x0B: | 388 case 0x0B: |
| 389 case 0x0C: | 389 case 0x0C: |
| 390 case 0x20: | 390 case 0x20: |
| 391 XFA_FMDChar::inc(m_ptr); | 391 XFA_FMDChar::inc(m_ptr); |
| 392 break; | 392 break; |
| 393 default: { | 393 default: { |
| 394 const FX_WCHAR* pTemp = 0; | 394 const FX_WCHAR* pTemp = 0; |
| (...skipping 28 matching lines...) Expand all Loading... |
| 423 const FX_WCHAR*& pEnd) { | 423 const FX_WCHAR*& pEnd) { |
| 424 const FX_WCHAR* pStart = p; | 424 const FX_WCHAR* pStart = p; |
| 425 uint16_t ch = 0; | 425 uint16_t ch = 0; |
| 426 XFA_FMDChar::inc(p); | 426 XFA_FMDChar::inc(p); |
| 427 ch = XFA_FMDChar::get(p); | 427 ch = XFA_FMDChar::get(p); |
| 428 while (ch) { | 428 while (ch) { |
| 429 if (!XFA_FMDChar::isAvalid(p)) { | 429 if (!XFA_FMDChar::isAvalid(p)) { |
| 430 ch = XFA_FMDChar::get(p); | 430 ch = XFA_FMDChar::get(p); |
| 431 pEnd = p; | 431 pEnd = p; |
| 432 t->m_wstring = CFX_WideStringC(pStart, (pEnd - pStart)); | 432 t->m_wstring = CFX_WideStringC(pStart, (pEnd - pStart)); |
| 433 Error(FMERR_UNSUPPORTED_CHAR, ch); | 433 Error(kFMErrUnsupportedChar, ch); |
| 434 return 1; | 434 return 1; |
| 435 } | 435 } |
| 436 if (ch == '"') { | 436 if (ch == '"') { |
| 437 XFA_FMDChar::inc(p); | 437 XFA_FMDChar::inc(p); |
| 438 if (!XFA_FMDChar::isAvalid(p)) { | 438 if (!XFA_FMDChar::isAvalid(p)) { |
| 439 ch = XFA_FMDChar::get(p); | 439 ch = XFA_FMDChar::get(p); |
| 440 pEnd = p; | 440 pEnd = p; |
| 441 t->m_wstring = CFX_WideStringC(pStart, (pEnd - pStart)); | 441 t->m_wstring = CFX_WideStringC(pStart, (pEnd - pStart)); |
| 442 Error(FMERR_UNSUPPORTED_CHAR, ch); | 442 Error(kFMErrUnsupportedChar, ch); |
| 443 return 1; | 443 return 1; |
| 444 } | 444 } |
| 445 ch = XFA_FMDChar::get(p); | 445 ch = XFA_FMDChar::get(p); |
| 446 if (ch == '"') { | 446 if (ch == '"') { |
| 447 goto NEXT; | 447 goto NEXT; |
| 448 } else { | 448 } else { |
| 449 break; | 449 break; |
| 450 } | 450 } |
| 451 } | 451 } |
| 452 NEXT: | 452 NEXT: |
| 453 XFA_FMDChar::inc(p); | 453 XFA_FMDChar::inc(p); |
| 454 ch = XFA_FMDChar::get(p); | 454 ch = XFA_FMDChar::get(p); |
| 455 } | 455 } |
| 456 pEnd = p; | 456 pEnd = p; |
| 457 t->m_wstring = CFX_WideStringC(pStart, (pEnd - pStart)); | 457 t->m_wstring = CFX_WideStringC(pStart, (pEnd - pStart)); |
| 458 return 0; | 458 return 0; |
| 459 } | 459 } |
| 460 | 460 |
| 461 uint32_t CXFA_FMLexer::Identifiers(CXFA_FMToken* t, | 461 uint32_t CXFA_FMLexer::Identifiers(CXFA_FMToken* t, |
| 462 const FX_WCHAR* p, | 462 const FX_WCHAR* p, |
| 463 const FX_WCHAR*& pEnd) { | 463 const FX_WCHAR*& pEnd) { |
| 464 const FX_WCHAR* pStart = p; | 464 const FX_WCHAR* pStart = p; |
| 465 uint16_t ch = 0; | 465 uint16_t ch = 0; |
| 466 ch = XFA_FMDChar::get(p); | 466 ch = XFA_FMDChar::get(p); |
| 467 XFA_FMDChar::inc(p); | 467 XFA_FMDChar::inc(p); |
| 468 if (!XFA_FMDChar::isAvalid(p)) { | 468 if (!XFA_FMDChar::isAvalid(p)) { |
| 469 pEnd = p; | 469 pEnd = p; |
| 470 t->m_wstring = CFX_WideStringC(pStart, (pEnd - pStart)); | 470 t->m_wstring = CFX_WideStringC(pStart, (pEnd - pStart)); |
| 471 Error(FMERR_UNSUPPORTED_CHAR, ch); | 471 Error(kFMErrUnsupportedChar, ch); |
| 472 return 1; | 472 return 1; |
| 473 } | 473 } |
| 474 ch = XFA_FMDChar::get(p); | 474 ch = XFA_FMDChar::get(p); |
| 475 while (ch) { | 475 while (ch) { |
| 476 if (!XFA_FMDChar::isAvalid(p)) { | 476 if (!XFA_FMDChar::isAvalid(p)) { |
| 477 pEnd = p; | 477 pEnd = p; |
| 478 t->m_wstring = CFX_WideStringC(pStart, (pEnd - pStart)); | 478 t->m_wstring = CFX_WideStringC(pStart, (pEnd - pStart)); |
| 479 Error(FMERR_UNSUPPORTED_CHAR, ch); | 479 Error(kFMErrUnsupportedChar, ch); |
| 480 return 1; | 480 return 1; |
| 481 } | 481 } |
| 482 ch = XFA_FMDChar::get(p); | 482 ch = XFA_FMDChar::get(p); |
| 483 if (XFA_FMDChar::isUnicodeAlpha(ch)) { | 483 if (XFA_FMDChar::isUnicodeAlpha(ch)) { |
| 484 XFA_FMDChar::inc(p); | 484 XFA_FMDChar::inc(p); |
| 485 } else { | 485 } else { |
| 486 pEnd = p; | 486 pEnd = p; |
| 487 t->m_wstring = CFX_WideStringC(pStart, (pEnd - pStart)); | 487 t->m_wstring = CFX_WideStringC(pStart, (pEnd - pStart)); |
| 488 return 0; | 488 return 0; |
| 489 } | 489 } |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 525 if (uHash == keyword.m_uHash) | 525 if (uHash == keyword.m_uHash) |
| 526 return keyword.m_type; | 526 return keyword.m_type; |
| 527 if (uHash < keyword.m_uHash) | 527 if (uHash < keyword.m_uHash) |
| 528 iEnd = iMid - 1; | 528 iEnd = iMid - 1; |
| 529 else | 529 else |
| 530 iStart = iMid + 1; | 530 iStart = iMid + 1; |
| 531 } while (iStart <= iEnd); | 531 } while (iStart <= iEnd); |
| 532 return TOKidentifier; | 532 return TOKidentifier; |
| 533 } | 533 } |
| 534 | 534 |
| 535 void CXFA_FMLexer::Error(XFA_FM_ERRMSG msg, ...) { | 535 void CXFA_FMLexer::Error(const FX_WCHAR* msg, ...) { |
| 536 m_pErrorInfo->linenum = m_uCurrentLine; | 536 m_pErrorInfo->linenum = m_uCurrentLine; |
| 537 const FX_WCHAR* lpMessageInfo = XFA_FM_ErrorMsg(msg); | |
| 538 va_list ap; | 537 va_list ap; |
| 539 va_start(ap, msg); | 538 va_start(ap, msg); |
| 540 m_pErrorInfo->message.FormatV(lpMessageInfo, ap); | 539 m_pErrorInfo->message.FormatV(msg, ap); |
| 541 va_end(ap); | 540 va_end(ap); |
| 542 } | 541 } |
| 543 | 542 |
| 544 FX_BOOL CXFA_FMLexer::HasError() const { | 543 FX_BOOL CXFA_FMLexer::HasError() const { |
| 545 if (m_pErrorInfo->message.IsEmpty()) { | 544 if (m_pErrorInfo->message.IsEmpty()) { |
| 546 return FALSE; | 545 return FALSE; |
| 547 } | 546 } |
| 548 return TRUE; | 547 return TRUE; |
| 549 } | 548 } |
| OLD | NEW |