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 |