Pretty Printing for PHP

Here’s a PHP function for reformatting the whitespace in PHP code:

\n”;
$indentlevel = 0;
$output = ”;

foreach(token_get_all($sourcecode) as $token)
{
if (is_array($token))
list($tokentype, $spelling) = $token;
else
list($tokentype, $spelling) = array(NULL, $token);

if ($tokentype==T_WHITESPACE && preg_match(‘/\s$/’, $output))
continue;
elseif ($tokentype==T_WHITESPACE)
$spelling = ‘ ‘;

if ($spelling=='{‘)
{
$indentlevel++;

if ($outmode==SC_IMPROVED_BRACES)
$output .= “\n$indent”;
elseif ($outmode==SC_WEIRDASS_BRACES)
$output .= “\n$indent\t”;
}
elseif ($spelling==’}’)
{
$indentlevel–;
$output = preg_replace(‘/\t$/i’, ”, $output);

if ($outmode==SC_WEIRDASS_BRACES)
$output .= “\t”;
}

$indent = str_repeat(“\t”, $indentlevel);

$output .= $spelling;
if ($spelling==’;’||$spelling=='{‘||$spelling==’}’)
$output .= “\n$indent”;
}

return $output;
}

$sc = ‘echo “1”;if (FALSE){echo 2;
echo 2; echo 2; if( TRUE ){echo 3;}}echo 4;’;

print sc_pp($sc, 1);

1?>