Lines Matching refs:src

74     src = s.replace("\r\n", "\n")
84 pos = skip_chars(src, pos, TOML_WS)
95 char = src[pos]
102 pos = key_value_rule(src, pos, out, header, parse_float)
103 pos = skip_chars(src, pos, TOML_WS)
106 second_char: str | None = src[pos + 1]
111 pos, header = create_list_rule(src, pos, out)
113 pos, header = create_dict_rule(src, pos, out)
114 pos = skip_chars(src, pos, TOML_WS)
116 raise suffixed_err(src, pos, "Invalid statement")
119 pos = skip_comment(src, pos)
123 char = src[pos]
128 src, pos, "Expected newline or end of document after a statement"
232 def skip_chars(src: str, pos: Pos, chars: Iterable[str]) -> Pos:
234 while src[pos] in chars:
242 src: str,
250 new_pos = src.index(expect, pos)
252 new_pos = len(src)
254 raise suffixed_err(src, new_pos, f"Expected {expect!r}") from None
256 if not error_on.isdisjoint(src[pos:new_pos]):
257 while src[pos] not in error_on:
259 raise suffixed_err(src, pos, f"Found invalid character {src[pos]!r}")
263 def skip_comment(src: str, pos: Pos) -> Pos:
265 char: str | None = src[pos]
270 src, pos + 1, "\n", error_on=ILLEGAL_COMMENT_CHARS, error_on_eof=False
275 def skip_comments_and_array_ws(src: str, pos: Pos) -> Pos:
278 pos = skip_chars(src, pos, TOML_WS_AND_NEWLINE)
279 pos = skip_comment(src, pos)
284 def create_dict_rule(src: str, pos: Pos, out: Output) -> tuple[Pos, Key]:
286 pos = skip_chars(src, pos, TOML_WS)
287 pos, key = parse_key(src, pos)
290 raise suffixed_err(src, pos, f"Cannot declare {key} twice")
295 raise suffixed_err(src, pos, "Cannot overwrite a value") from None
297 if not src.startswith("]", pos):
298 raise suffixed_err(src, pos, "Expected ']' at the end of a table declaration")
302 def create_list_rule(src: str, pos: Pos, out: Output) -> tuple[Pos, Key]:
304 pos = skip_chars(src, pos, TOML_WS)
305 pos, key = parse_key(src, pos)
308 raise suffixed_err(src, pos, f"Cannot mutate immutable namespace {key}")
316 raise suffixed_err(src, pos, "Cannot overwrite a value") from None
318 if not src.startswith("]]", pos):
319 raise suffixed_err(src, pos, "Expected ']]' at the end of an array declaration")
324 src: str, pos: Pos, out: Output, header: Key, parse_float: ParseFloat
326 pos, key, value = parse_key_value_pair(src, pos, parse_float)
334 raise suffixed_err(src, pos, f"Cannot redefine namespace {cont_key}")
341 src, pos, f"Cannot mutate immutable namespace {abs_key_parent}"
347 raise suffixed_err(src, pos, "Cannot overwrite a value") from None
349 raise suffixed_err(src, pos, "Cannot overwrite a value")
358 src: str, pos: Pos, parse_float: ParseFloat
360 pos, key = parse_key(src, pos)
362 char: str | None = src[pos]
366 raise suffixed_err(src, pos, "Expected '=' after a key in a key/value pair")
368 pos = skip_chars(src, pos, TOML_WS)
369 pos, value = parse_value(src, pos, parse_float)
373 def parse_key(src: str, pos: Pos) -> tuple[Pos, Key]:
374 pos, key_part = parse_key_part(src, pos)
376 pos = skip_chars(src, pos, TOML_WS)
379 char: str | None = src[pos]
385 pos = skip_chars(src, pos, TOML_WS)
386 pos, key_part = parse_key_part(src, pos)
388 pos = skip_chars(src, pos, TOML_WS)
391 def parse_key_part(src: str, pos: Pos) -> tuple[Pos, str]:
393 char: str | None = src[pos]
398 pos = skip_chars(src, pos, BARE_KEY_CHARS)
399 return pos, src[start_pos:pos]
401 return parse_literal_str(src, pos)
403 return parse_one_line_basic_str(src, pos)
404 raise suffixed_err(src, pos, "Invalid initial character for a key part")
407 def parse_one_line_basic_str(src: str, pos: Pos) -> tuple[Pos, str]:
409 return parse_basic_str(src, pos, multiline=False)
412 def parse_array(src: str, pos: Pos, parse_float: ParseFloat) -> tuple[Pos, list]:
416 pos = skip_comments_and_array_ws(src, pos)
417 if src.startswith("]", pos):
420 pos, val = parse_value(src, pos, parse_float)
422 pos = skip_comments_and_array_ws(src, pos)
424 c = src[pos : pos + 1]
428 raise suffixed_err(src, pos, "Unclosed array")
431 pos = skip_comments_and_array_ws(src, pos)
432 if src.startswith("]", pos):
436 def parse_inline_table(src: str, pos: Pos, parse_float: ParseFloat) -> tuple[Pos, dict]:
441 pos = skip_chars(src, pos, TOML_WS)
442 if src.startswith("}", pos):
445 pos, key, value = parse_key_value_pair(src, pos, parse_float)
448 raise suffixed_err(src, pos, f"Cannot mutate immutable namespace {key}")
452 raise suffixed_err(src, pos, "Cannot overwrite a value") from None
454 raise suffixed_err(src, pos, f"Duplicate inline table key {key_stem!r}")
456 pos = skip_chars(src, pos, TOML_WS)
457 c = src[pos : pos + 1]
461 raise suffixed_err(src, pos, "Unclosed inline table")
465 pos = skip_chars(src, pos, TOML_WS)
469 src: str, pos: Pos, *, multiline: bool = False
471 escape_id = src[pos : pos + 2]
477 pos = skip_chars(src, pos, TOML_WS)
479 char = src[pos]
483 raise suffixed_err(src, pos, "Unescaped '\\' in a string")
485 pos = skip_chars(src, pos, TOML_WS_AND_NEWLINE)
488 return parse_hex_char(src, pos, 4)
490 return parse_hex_char(src, pos, 8)
494 raise suffixed_err(src, pos, "Unescaped '\\' in a string") from None
497 def parse_basic_str_escape_multiline(src: str, pos: Pos) -> tuple[Pos, str]:
498 return parse_basic_str_escape(src, pos, multiline=True)
501 def parse_hex_char(src: str, pos: Pos, hex_len: int) -> tuple[Pos, str]:
502 hex_str = src[pos : pos + hex_len]
504 raise suffixed_err(src, pos, "Invalid hex value")
508 raise suffixed_err(src, pos, "Escaped character is not a Unicode scalar value")
512 def parse_literal_str(src: str, pos: Pos) -> tuple[Pos, str]:
516 src, pos, "'", error_on=ILLEGAL_LITERAL_STR_CHARS, error_on_eof=True
518 return pos + 1, src[start_pos:pos] # Skip ending apostrophe
521 def parse_multiline_str(src: str, pos: Pos, *, literal: bool) -> tuple[Pos, str]:
523 if src.startswith("\n", pos):
529 src,
535 result = src[pos:end_pos]
539 pos, result = parse_basic_str(src, pos, multiline=True)
543 if not src.startswith(delim, pos):
546 if not src.startswith(delim, pos):
552 def parse_basic_str(src: str, pos: Pos, *, multiline: bool) -> tuple[Pos, str]:
563 char = src[pos]
565 raise suffixed_err(src, pos, "Unterminated string") from None
568 return pos + 1, result + src[start_pos:pos]
569 if src.startswith('"""', pos):
570 return pos + 3, result + src[start_pos:pos]
574 result += src[start_pos:pos]
575 pos, parsed_escape = parse_escapes(src, pos)
580 raise suffixed_err(src, pos, f"Illegal character {char!r}")
585 src: str, pos: Pos, parse_float: ParseFloat
588 char: str | None = src[pos]
596 if src.startswith('"""', pos):
597 return parse_multiline_str(src, pos, literal=False)
598 return parse_one_line_basic_str(src, pos)
602 if src.startswith("'''", pos):
603 return parse_multiline_str(src, pos, literal=True)
604 return parse_literal_str(src, pos)
608 if src.startswith("true", pos):
611 if src.startswith("false", pos):
616 return parse_array(src, pos, parse_float)
620 return parse_inline_table(src, pos, parse_float)
623 datetime_match = RE_DATETIME.match(src, pos)
628 raise suffixed_err(src, pos, "Invalid date or datetime") from e
630 localtime_match = RE_LOCALTIME.match(src, pos)
637 number_match = RE_NUMBER.match(src, pos)
642 first_three = src[pos : pos + 3]
645 first_four = src[pos : pos + 4]
649 raise suffixed_err(src, pos, "Invalid value")
652 def suffixed_err(src: str, pos: Pos, msg: str) -> TOMLDecodeError:
656 def coord_repr(src: str, pos: Pos) -> str:
657 if pos >= len(src):
659 line = src.count("\n", 0, pos) + 1
663 column = pos - src.rindex("\n", 0, pos)
666 return TOMLDecodeError(f"{msg} (at {coord_repr(src, pos)})")