Skip to content

Commit 95794bf

Browse files
committed
Add helper methods
1 parent 6045028 commit 95794bf

1 file changed

Lines changed: 39 additions & 1 deletion

File tree

src/localization_translation/lua_parser.py

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -622,7 +622,7 @@ def read_field(
622622
table: dict[str | int, object],
623623
) -> tuple[str | int, object]:
624624
"""Read a table field value."""
625-
assert value.name in {"Field", "Assignment"}
625+
assert value.name in {"Field", "Assignment"}, f"{value.name = }"
626626
if value.name == "Assignment":
627627
return read_assignment(value)
628628
# if value.name == "Indexed":
@@ -675,5 +675,43 @@ def read_keyword(value: Value[str]) -> object:
675675
# return value.unpack_join()
676676

677677

678+
def convert_lists(table_data: dict[Any, Any]) -> dict[Any, Any]:
679+
"""Convert internal numeric tables to lists."""
680+
681+
def convert_dict(data: dict[Any, T]) -> dict[Any, T] | list[T]:
682+
if all(isinstance(key, int) for key in data):
683+
return [data[i + 1] for i in range(len(data))]
684+
new = {}
685+
for k, v in data.items():
686+
if isinstance(v, dict):
687+
new[k] = convert_dict(v)
688+
else:
689+
new[k] = v
690+
return new
691+
692+
value = convert_dict(table_data)
693+
assert isinstance(value, dict)
694+
return value
695+
696+
697+
def undo_convert_lists(table_data: dict[Any, Any]) -> dict[Any, Any]:
698+
"""Convert internal lists to numeric tables."""
699+
700+
def convert_dict(data: dict[Any, T] | list[T]) -> dict[Any, T]:
701+
if isinstance(data, list):
702+
return {i + 1: value for i, value in enumerate(data)}
703+
new = {}
704+
for k, v in data.items():
705+
if isinstance(v, dict | list):
706+
new[k] = convert_dict(v)
707+
else:
708+
new[k] = v
709+
return new
710+
711+
value = convert_dict(table_data)
712+
assert isinstance(value, dict)
713+
return value
714+
715+
678716
if __name__ == "__main__":
679717
print(f"{__title__}\nProgrammed by {__author__}.\n")

0 commit comments

Comments
 (0)