Поведение, которое вы наблюдали при использовании Tidy, является результатом базового использования DOM API. Вместо того чтобы манипулировать предоставленным исходным кодом, DOM API реконструирует весь исходный код, тем самым исправляя его.
Я написал Dindent , это библиотека, которая использует Regex. Он не делает ничего, кроме добавления отступов и удаления пробелов. Однако я не советую использовать эту реализацию вне целей разработки.