antes de nada estas trabajando con algún estándar? por que de acuerdo al estándar, son X espacios en blanco para identar o 1 tab.
caso de HTML, siempre habrá un jerarquía div tiene mas jerarquía de ul > li > a >span etc me entiendes, Vas a tener que recorrer todo el archivo y mover como sea necesario
CSS, mas fácil, solo busca "{" e ingresa un salto de linea, luego busca ";" otro salto de linea.... m,e entiendes...
creo que en el caso de CSS q es mas fácil toma todo el input área, quita los espacios en blanco todos que te quede el texto minificado luego buscas la "{", ":", ";", "}". con un split luego insertas los espacios con replace
esto es básico tienes q mejorarlo pero. textoAFormatear.replace("{","{\n\r ") e igual con los demás, creo que no es optimo seria mejor con expresiones regulares pero para salir del apuro iría bien