(
src: str, pos: Pos, *, multiline: bool = False
)
| 543 | |
| 544 | |
| 545 | def parse_basic_str_escape( |
| 546 | src: str, pos: Pos, *, multiline: bool = False |
| 547 | ) -> tuple[Pos, str]: |
| 548 | escape_id = src[pos : pos + 2] |
| 549 | pos += 2 |
| 550 | if multiline and escape_id in {"\\ ", "\\\t", "\\\n"}: |
| 551 | # Skip whitespace until next non-whitespace character or end of |
| 552 | # the doc. Error if non-whitespace is found before newline. |
| 553 | if escape_id != "\\\n": |
| 554 | pos = skip_chars(src, pos, TOML_WS) |
| 555 | try: |
| 556 | char = src[pos] |
| 557 | except IndexError: |
| 558 | return pos, "" |
| 559 | if char != "\n": |
| 560 | raise TOMLDecodeError("Unescaped '\\' in a string", src, pos) |
| 561 | pos += 1 |
| 562 | pos = skip_chars(src, pos, TOML_WS_AND_NEWLINE) |
| 563 | return pos, "" |
| 564 | if escape_id == "\\u": |
| 565 | return parse_hex_char(src, pos, 4) |
| 566 | if escape_id == "\\U": |
| 567 | return parse_hex_char(src, pos, 8) |
| 568 | try: |
| 569 | return pos, BASIC_STR_ESCAPE_REPLACEMENTS[escape_id] |
| 570 | except KeyError: |
| 571 | raise TOMLDecodeError("Unescaped '\\' in a string", src, pos) from None |
| 572 | |
| 573 | |
| 574 | def parse_basic_str_escape_multiline(src: str, pos: Pos) -> tuple[Pos, str]: |
no test coverage detected