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


<?php

define('SC_STANDARD_BRACES', 0);
define('SC_IMPROVED_BRACES', 1);
define('SC_WEIRDASS_BRACES', 2);

function sc_pp ($sourcecode, $outmode=SC_STANDARD_BRACES)
{
	$sourcecode  = "<?php\n{$sourcecode}\n?>\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?>