| 611 | } |
| 612 | |
| 613 | void fxGetNextString(txParser* parser, int c) |
| 614 | { |
| 615 | txString p = parser->buffer; |
| 616 | txString q = p + parser->bufferSize - 1; |
| 617 | for (;;) { |
| 618 | if (parser->character == (txU4)C_EOF) { |
| 619 | fxReportParserError(parser, parser->states[2].line, "end of file in string"); |
| 620 | break; |
| 621 | } |
| 622 | else if (parser->character == 10) { |
| 623 | parser->states[2].line++; |
| 624 | if (c == '`') { |
| 625 | p = fxUTF8Buffer(parser, parser->character, p, q); |
| 626 | fxGetNextCharacter(parser); |
| 627 | } |
| 628 | else { |
| 629 | fxReportParserError(parser, parser->states[2].line, "end of line in string"); |
| 630 | break; |
| 631 | } |
| 632 | } |
| 633 | else if (parser->character == 13) { |
| 634 | parser->states[2].line++; |
| 635 | if (c == '`') { |
| 636 | p = fxUTF8Buffer(parser, 10, p, q); |
| 637 | fxGetNextCharacter(parser); |
| 638 | if (parser->character == 10) |
| 639 | fxGetNextCharacter(parser); |
| 640 | } |
| 641 | else { |
| 642 | fxReportParserError(parser, parser->states[2].line, "end of line in string"); |
| 643 | break; |
| 644 | } |
| 645 | } |
| 646 | else if ((parser->character == 0x2028) || (parser->character == 0x2029)) { |
| 647 | parser->states[2].line++; |
| 648 | p = fxUTF8Buffer(parser, parser->character, p, q); |
| 649 | fxGetNextCharacter(parser); |
| 650 | } |
| 651 | else if (parser->character == (txU4)c) { |
| 652 | break; |
| 653 | } |
| 654 | else if (parser->character == '$') { |
| 655 | fxGetNextCharacter(parser); |
| 656 | if ((c == '`') && (parser->character == '{')) |
| 657 | break; |
| 658 | p = fxUTF8Buffer(parser, '$', p, q); |
| 659 | } |
| 660 | else if (parser->character == '\\') { |
| 661 | parser->states[2].escaped = 1; |
| 662 | p = fxUTF8Buffer(parser, '\\', p, q); |
| 663 | fxGetNextCharacter(parser); |
| 664 | switch (parser->character) { |
| 665 | case 10: |
| 666 | case 0x2028: |
| 667 | case 0x2029: |
| 668 | parser->states[2].line++; |
| 669 | p = fxUTF8Buffer(parser, parser->character, p, q); |
| 670 | fxGetNextCharacter(parser); |
no test coverage detected