or tag. * @return string Corrected HTML output * @throws MWException */ 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 ); } /** * @return bool */ public static function isEnabled() { return self::singleton() !== false; } /** * @return bool|\MediaWiki\Tidy\TidyDriverBase */ public 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 = [ '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; } self::$instance = self::factory( $config ); } return self::$instance; } /** * Create a new Tidy driver object from configuration. * @see $wgTidyConfig * @param array $config * @return bool|\MediaWiki\Tidy\TidyDriverBase * @throws MWException */ public static function factory( array $config ) { switch ( $config['driver'] ) { case 'RaggettInternalHHVM': $instance = new MediaWiki\Tidy\RaggettInternalHHVM( $config ); break; case 'RaggettInternalPHP': $instance = new MediaWiki\Tidy\RaggettInternalPHP( $config ); break; case 'RaggettExternal': $instance = new MediaWiki\Tidy\RaggettExternal( $config ); break; case 'Html5Depurate': $instance = new MediaWiki\Tidy\Html5Depurate( $config ); break; case 'Html5Internal': $instance = new MediaWiki\Tidy\Html5Internal( $config ); break; case 'RemexHtml': $instance = new MediaWiki\Tidy\RemexDriver( $config ); break; case 'disabled': return false; default: throw new MWException( "Invalid tidy driver: \"{$config['driver']}\"" ); } return $instance; } /** * Set the driver to be used. This is for testing. * @param MediaWiki\Tidy\TidyDriverBase|false|null $instance */ public static function setInstance( $instance ) { self::$instance = $instance; } /** * Destroy the current singleton instance */ public static function destroySingleton() { self::$instance = null; } }