(src: str, pos: Pos, *, multiline: bool)
| 629 | |
| 630 | |
| 631 | def parse_basic_str(src: str, pos: Pos, *, multiline: bool) -> tuple[Pos, str]: |
| 632 | if multiline: |
| 633 | error_on = ILLEGAL_MULTILINE_BASIC_STR_CHARS |
| 634 | parse_escapes = parse_basic_str_escape_multiline |
| 635 | else: |
| 636 | error_on = ILLEGAL_BASIC_STR_CHARS |
| 637 | parse_escapes = parse_basic_str_escape |
| 638 | result = "" |
| 639 | start_pos = pos |
| 640 | while True: |
| 641 | try: |
| 642 | char = src[pos] |
| 643 | except IndexError: |
| 644 | raise TOMLDecodeError("Unterminated string", src, pos) from None |
| 645 | if char == '"': |
| 646 | if not multiline: |
| 647 | return pos + 1, result + src[start_pos:pos] |
| 648 | if src.startswith('"""', pos): |
| 649 | return pos + 3, result + src[start_pos:pos] |
| 650 | pos += 1 |
| 651 | continue |
| 652 | if char == "\\": |
| 653 | result += src[start_pos:pos] |
| 654 | pos, parsed_escape = parse_escapes(src, pos) |
| 655 | result += parsed_escape |
| 656 | start_pos = pos |
| 657 | continue |
| 658 | if char in error_on: |
| 659 | raise TOMLDecodeError(f"Illegal character {char!r}", src, pos) |
| 660 | pos += 1 |
| 661 | |
| 662 | |
| 663 | def parse_value( # noqa: C901 |
no test coverage detected