default value. Depending on the type of the default value, * arguments will be typecast accordingly. For example, if * 'flag' => false is passed, all arguments for that will be cast to * boolean. Do *not* pass null, as it will not be recognized. * @param * $aliases * */ function htmlpurifier_parse_args(&$AC, $aliases) { if (empty ( $_GET ) && ! empty ( $_SERVER ['argv'] )) { array_shift ( $_SERVER ['argv'] ); $o = false; $bool = false; $val_is_bool = false; foreach ( $_SERVER ['argv'] as $opt ) { if ($o !== false) { $v = $opt; } else { if ($opt === '') continue; if (strlen ( $opt ) > 2 && strncmp ( $opt, '--', 2 ) === 0) { $o = substr ( $opt, 2 ); } elseif ($opt [0] == '-') { $o = substr ( $opt, 1 ); } else { $lopt = strtolower ( $opt ); if ($bool !== false && ($opt === '0' || $lopt === 'off' || $lopt === 'no')) { $o = $bool; $v = false; $val_is_bool = true; } elseif (isset ( $aliases [''] )) { $o = $aliases ['']; } } $bool = false; if (! isset ( $AC [$o] ) || ! is_bool ( $AC [$o] )) { if (strpos ( $o, '=' ) === false) { continue; } list ( $o, $v ) = explode ( '=', $o ); } elseif (! $val_is_bool) { $v = true; $bool = $o; } $val_is_bool = false; } if ($o === false) continue; htmlpurifier_args ( $AC, $aliases, $o, $v ); $o = false; } } else { foreach ( $_GET as $o => $v ) { if (function_exists ( 'get_magic_quotes_gpc' ) && get_magic_quotes_gpc ()) { $v = stripslashes ( $v ); } htmlpurifier_args ( $AC, $aliases, $o, $v ); } } } /** * Actually performs assignment to $AC, see htmlpurifier_parse_args() * * @param $AC Arguments * array to write to * @param $aliases Aliases * for options * @param $o Argument * name * @param $v Argument * value */ function htmlpurifier_args(&$AC, $aliases, $o, $v) { if (isset ( $aliases [$o] )) $o = $aliases [$o]; if (! isset ( $AC [$o] )) return; if (is_string ( $AC [$o] )) $AC [$o] = $v; if (is_bool ( $AC [$o] )) $AC [$o] = ($v === '') ? true : ( bool ) $v; if (is_int ( $AC [$o] )) $AC [$o] = ( int ) $v; } /** * Adds a test-class; we use file extension to determine which class to use. */ function htmlpurifier_add_test($test, $test_file, $only_phpt = false) { switch (strrchr ( $test_file, "." )) { case '.phpt' : return $test->add ( new PHPT_Controller_SimpleTest ( $test_file ) ); case '.php' : require_once $test_file; return $test->add ( path2class ( $test_file ) ); case '.vtest' : return $test->add ( new HTMLPurifier_ConfigSchema_ValidatorTestCase ( $test_file ) ); case '.htmlt' : return $test->add ( new HTMLPurifier_HTMLT ( $test_file ) ); default : trigger_error ( "$test_file is an invalid file for testing", E_USER_ERROR ); } } /** * Debugging function that prints tokens in a user-friendly manner. */ function printTokens($tokens, $index = null) { $string = '
';
	$generator = new HTMLPurifier_Generator ( HTMLPurifier_Config::createDefault (), new HTMLPurifier_Context () );
	foreach ( $tokens as $i => $token ) {
		$string .= printToken ( $generator, $token, $i, $index == $i );
	}
	$string .= '
'; echo $string; } function printToken($generator, $token, $i, $isCursor) { $string = ""; if ($isCursor) $string .= '['; $string .= "$i"; $string .= $generator->escape ( $generator->generateFromToken ( $token ) ); if ($isCursor) $string .= ']'; return $string; } function printZipper($zipper, $token) { $string = '
';
	$generator = new HTMLPurifier_Generator ( HTMLPurifier_Config::createDefault (), new HTMLPurifier_Context () );
	foreach ( $zipper->front as $i => $t ) {
		$string .= printToken ( $generator, $t, $i, false );
	}
	if ($token !== NULL) {
		$string .= printToken ( $generator, $token, "", true );
	}
	for($i = count ( $zipper->back ) - 1; $i >= 0; $i --) {
		$string .= printToken ( $generator, $zipper->back [$i], $i, false );
	}
	$string .= '
'; echo $string; } /** * Convenient "insta-fail" test-case to add if any outside things fail */ class FailedTest extends UnitTestCase { protected $msg, $details; public function __construct($msg, $details = null) { $this->msg = $msg; $this->details = $details; } public function test() { $this->fail ( $this->msg ); if ($this->details) $this->reporter->paintFormattedMessage ( $this->details ); } } /** * Flushes all caches, and fatally errors out if there's a problem. */ function htmlpurifier_flush($php, $reporter) { exec ( $php . ' ../maintenance/flush.php ' . $php . ' 2>&1', $out, $status ); if ($status) { $test = new FailedTest ( 'maintenance/flush.php returned non-zero exit status', wordwrap ( implode ( "\n", $out ), 80 ) ); $test->run ( $reporter ); exit ( 1 ); } } /** * Dumps error queue, useful if there has been a fatal error. */ function htmlpurifier_dump_error_queue() { $context = SimpleTest::getContext (); $queue = $context->get ( 'SimpleErrorQueue' ); while ( ($error = $queue->extract ()) !== false ) { var_dump ( $error ); } } register_shutdown_function ( 'htmlpurifier_dump_error_queue' ); // vim: et sw=4 sts=4