# decompiler.py # # Copyright 2021 James Westman # # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as # published by the Free Software Foundation; either version 3 of the # License, or (at your option) any later version. # # This file is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this program. If not, see . # # SPDX-License-Identifier: LGPL-3.0-or-later from . import tokenizer OPENING_TOKENS = ["{"] CLOSING_TOKENS = ["}"] NEWLINE_AFTER = [";", "]"] + OPENING_TOKENS + CLOSING_TOKENS class Format: def format(data): indent_levels = 0 tokens = tokenizer.tokenize(data) tokenized_str = "" for item in tokens: if item.type != tokenizer.TokenType.WHITESPACE: if str(item) in OPENING_TOKENS: split_string = tokenized_str.splitlines() split_string.insert(-1, "") tokenized_str = "\n".join(split_string) indent_levels += 1 elif str(item) in CLOSING_TOKENS: tokenized_str = tokenized_str[:-2] indent_levels -= 1 tokenized_str += str(item) if str(item) in NEWLINE_AFTER: tokenized_str += "\n" tokenized_str += indent_levels * " " else: if tokenized_str == tokenized_str.strip(): tokenized_str += " " print(tokenized_str) # TODO: Remove this when the MR is ready to be merged return tokenized_str