Может быть, неожиданно для вас, нет простого ответа на ваш вопрос.
И поэтому ваш код никогда не будет работать.
Первое и самое важное, вы должны пониматьи определить стили отступов. Пожалуйста, смотрите здесь в Википедии . Даже в приведенном вами мини-примере вы смешиваете Allman и K & R. Итак, сначала вы должны уяснить, что использовать.
Затем вы должны знать, что скобки могут появляться в кавычках, двойных кавычках, C-комментариях, C ++ комментариях и, что еще хуже, многострочных комментариях (и #если или #idefs). Это сделает жизнь по-настоящему тяжелой.
И для закрывающих скобок и, например, стиля Аллмана, вы узнаете необходимый отступ только после того, как напечатали «пробелы отступа». Поэтому вам нужно работать с ориентированной строкой или использовать линейные буферы, прежде чем печатать полную строку.
Пример:
}
В этой простой строке вы прочтете '}'характер, после того, как вы уже напечатали пробелы. Это всегда приведет к неправильному (слишком правильному) отступу.
Логика только для этого случая была бы сложной. Затем Ant принимает такие утверждения, как
if (x ==5) { y = 3; } } } }
Так что, к сожалению, я не могу дать вам простого решения.
Потребуется парсер, или я просто рекомендую любой вид более красивого или красивого принтера