|
| 1 | +""" |
| 2 | +provides string_to_lua utilities |
| 3 | +""" |
| 4 | + |
| 5 | +from . import core |
| 6 | +from . import utils |
| 7 | + |
| 8 | + |
| 9 | +def _get_table_name(**kwargs) -> str: |
| 10 | + return kwargs.get("table_name", "main") |
| 11 | + |
| 12 | + |
| 13 | +def _get_function_name(in_function_id: int, **kwargs) -> str: |
| 14 | + prefix = _get_table_name(**kwargs) + "." |
| 15 | + return prefix + kwargs.get("function_id_to_name", core.get_function_namer("fun_"))( |
| 16 | + in_function_id |
| 17 | + ) |
| 18 | + |
| 19 | + |
| 20 | +def atom_to_code(in_atom: core.Atom) -> str: |
| 21 | + """ |
| 22 | + returns a string/piece of lua code resulting in printing the |
| 23 | + in_atom.atom_char to the standard output |
| 24 | + """ |
| 25 | + if in_atom.atom_char == "\n": |
| 26 | + return "print()" |
| 27 | + if in_atom.atom_char == '"': |
| 28 | + return "io.write('\"')" |
| 29 | + special_chars = {"\\": "\\\\", "\t": "\\t"} |
| 30 | + res_char = special_chars.get(in_atom.atom_char, in_atom.atom_char) |
| 31 | + write_arg = f'"{res_char}"' |
| 32 | + return f"io.write({write_arg})" |
| 33 | + |
| 34 | + |
| 35 | +_function_call_str = utils.get_function_call_str_fun(_get_function_name, "", "()") |
| 36 | + |
| 37 | +_call_function_or_atom = utils.get_call_function_or_atom( |
| 38 | + atom_to_code, _function_call_str |
| 39 | +) |
| 40 | + |
| 41 | + |
| 42 | +_body_to_str = utils.get_body_to_str("\n", "\t", _call_function_or_atom, "", "") |
| 43 | + |
| 44 | + |
| 45 | +def _merge_to_full_function(in_function_name, in_function_body): |
| 46 | + function_body = " " |
| 47 | + if in_function_body: |
| 48 | + function_body = "\n" + in_function_body + "\n" |
| 49 | + return f"function {in_function_name}()" + function_body + "end\n" |
| 50 | + |
| 51 | + |
| 52 | +_function_to_code = utils.get_function_to_code( |
| 53 | + _get_function_name, _body_to_str, _merge_to_full_function |
| 54 | +) |
| 55 | + |
| 56 | + |
| 57 | +def _main_call_to_code(in_initial_call, **kwargs): |
| 58 | + return ( |
| 59 | + _call_function_or_atom(in_initial_call, **kwargs) + "\n" |
| 60 | + if in_initial_call is not None |
| 61 | + else "" |
| 62 | + ) |
| 63 | + |
| 64 | + |
| 65 | +def _join_to_final(main_call, function_definitions, **kwargs): |
| 66 | + res = "\n".join(function_definitions + [main_call]) |
| 67 | + if function_definitions: |
| 68 | + res = "local " + _get_table_name(**kwargs) + " = {}\n\n" + res |
| 69 | + return res |
| 70 | + |
| 71 | + |
| 72 | +proc_printer_program, proc = utils.get_all_proc_functions( |
| 73 | + _main_call_to_code, _function_to_code, _join_to_final |
| 74 | +) |
0 commit comments