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