Если в $content
имеется только один блок верхнего уровня, а не несколько блоков верхнего уровня, здесь возможное решение:
function indentBlock($content,$depth=0)
{
// function to build indent-spaces
$indent = function($depth) {
return str_pad("",$depth*self::INDENT," ");
};
// preg_match() splits $content in three parts:
// <before> { <inbetween> } <after>
if (preg_match('/^([^{]*){(.*)}([^}]*)$/',$content,$matches)) {
// re-assemble $content with newlines
$content =
$indent($depth).trim($matches[1])." {\n".
// recurse for
$indent($depth+1).trim(self:: indentBlock($matches[2],$depth+1))."\n".
$indent($depth)."}\n".
$indent($depth).trim($matches[3]);
}
return $content;
}
Для нескольких блоков в $content
мы должны обработать их с отдельным l oop впоследствии.
Пример ввода
a
b { c { d e
} f }
обрабатывается в:
a
b {
c {
d e
}
f
}