or tag. * @return string Corrected HTML output */ public static function tidy( $text ) { $driver = self::singleton(); if ( !$driver ) { throw new MWException( __METHOD__. ': tidy is disabled, caller should have checked MWTidy::isEnabled()' ); } return $driver->tidy( $text ); } /** * Check HTML for errors, used if $wgValidateAllHtml = true. * * @param string $text * @param string &$errorStr Return the error string * @return bool Whether the HTML is valid */ public static function checkErrors( $text, &$errorStr = null ) { $driver = self::singleton(); if ( !$driver ) { throw new MWException( __METHOD__. ': tidy is disabled, caller should have checked MWTidy::isEnabled()' ); } if ( $driver->supportsValidate() ) { return $driver->validate( $text, $errorStr ); } else { throw new MWException( __METHOD__ . ": error text return from HHVM tidy is not supported" ); } } public static function isEnabled() { return self::singleton() !== false; } protected static function singleton() { global $wgUseTidy, $wgTidyInternal, $wgTidyConf, $wgDebugTidy, $wgTidyConfig, $wgTidyBin, $wgTidyOpts; if ( self::$instance === null ) { if ( $wgTidyConfig !== null ) { $config = $wgTidyConfig; } elseif ( $wgUseTidy ) { // b/c configuration $config = array( 'tidyConfigFile' => $wgTidyConf, 'debugComment' => $wgDebugTidy, 'tidyBin' => $wgTidyBin, 'tidyCommandLine' => $wgTidyOpts ); if ( $wgTidyInternal ) { if ( wfIsHHVM() ) { $config['driver'] = 'RaggettInternalHHVM'; } else { $config['driver'] = 'RaggettInternalPHP'; } } else { $config['driver'] = 'RaggettExternal'; } } else { return false; } switch ( $config['driver'] ) { case 'RaggettInternalHHVM': self::$instance = new MediaWiki\Tidy\RaggettInternalHHVM( $config ); break; case 'RaggettInternalPHP': self::$instance = new MediaWiki\Tidy\RaggettInternalPHP( $config ); break; case 'RaggettExternal': self::$instance = new MediaWiki\Tidy\RaggettExternal( $config ); break; case 'Html5Depurate': self::$instance = new MediaWiki\Tidy\Html5Depurate( $config ); break; default: throw new MWException( "Invalid tidy driver: \"{$config['driver']}\"" ); } } return self::$instance; } /** * Set the driver to be used. This is for testing. * @param TidyDriverBase|false|null $instance */ public static function setInstance( $instance ) { self::$instance = $instance; } /** * Destroy the current singleton instance */ public static function destroySingleton() { self::$instance = null; } }