wiki.techinc.nl/includes/tidy/RemexDriver.php
Umherirrender 6eec17e9a9 Add missing documentation to class properties (miscellaneous classes)
Add doc-typehints to class properties found by the PropertyDocumentation
sniff to improve the documentation.

Once the sniff is enabled it avoids that new code is missing type
declarations. This is focused on documentation and does not change code.

Change-Id: I1da4b272a6b28c419cc8e860d142dae19ca0bbcf
2024-09-14 10:12:18 +02:00

93 lines
2.7 KiB
PHP

<?php
namespace MediaWiki\Tidy;
use MediaWiki\Config\ServiceOptions;
use MediaWiki\MainConfigNames;
use Wikimedia\RemexHtml\HTMLData;
use Wikimedia\RemexHtml\Serializer\Serializer;
use Wikimedia\RemexHtml\Serializer\SerializerWithTracer;
use Wikimedia\RemexHtml\Tokenizer\Tokenizer;
use Wikimedia\RemexHtml\TreeBuilder\Dispatcher;
use Wikimedia\RemexHtml\TreeBuilder\TreeBuilder;
use Wikimedia\RemexHtml\TreeBuilder\TreeMutationTracer;
class RemexDriver extends TidyDriverBase {
/** @var bool */
private $treeMutationTrace;
/** @var bool */
private $serializerTrace;
/** @var bool */
private $mungerTrace;
/** @var bool */
private $pwrap;
/** @var bool */
private $enableLegacyMediaDOM;
/** @internal */
public const CONSTRUCTOR_OPTIONS = [
MainConfigNames::TidyConfig,
MainConfigNames::ParserEnableLegacyMediaDOM,
];
/**
* @param ServiceOptions $options
*/
public function __construct( ServiceOptions $options ) {
$options->assertRequiredOptions( self::CONSTRUCTOR_OPTIONS );
$config = $options->get( MainConfigNames::TidyConfig );
$this->enableLegacyMediaDOM = $options->get( MainConfigNames::ParserEnableLegacyMediaDOM );
$config += [
'treeMutationTrace' => false,
'serializerTrace' => false,
'mungerTrace' => false,
'pwrap' => true
];
$this->treeMutationTrace = $config['treeMutationTrace'];
$this->serializerTrace = $config['serializerTrace'];
$this->mungerTrace = $config['mungerTrace'];
$this->pwrap = $config['pwrap'];
parent::__construct( $config );
}
/** @inheritDoc */
public function tidy( $text, ?callable $textProcessor = null ) {
$traceCallback = static function ( $msg ) {
wfDebug( "RemexHtml: $msg" );
};
$formatter = new RemexCompatFormatter( [ 'textProcessor' => $textProcessor ] );
if ( $this->serializerTrace ) {
$serializer = new SerializerWithTracer( $formatter, null, $traceCallback );
} else {
$serializer = new Serializer( $formatter );
}
if ( $this->pwrap ) {
$munger = new RemexCompatMunger( $serializer, $this->mungerTrace );
} else {
$munger = $serializer;
}
if ( $this->treeMutationTrace ) {
$tracer = new TreeMutationTracer( $munger, $traceCallback );
} else {
$tracer = $munger;
}
$treeBuilderClass = $this->enableLegacyMediaDOM ? TreeBuilder::class : RemexCompatBuilder::class;
$treeBuilder = new $treeBuilderClass( $tracer, [
'ignoreErrors' => true,
'ignoreNulls' => true,
] );
$dispatcher = new Dispatcher( $treeBuilder );
$tokenizer = new Tokenizer( $dispatcher, $text, [
'ignoreErrors' => true,
'ignoreCharRefs' => true,
'ignoreNulls' => true,
'skipPreprocess' => true,
] );
$tokenizer->execute( [
'fragmentNamespace' => HTMLData::NS_HTML,
'fragmentName' => 'body'
] );
return $serializer->getResult();
}
}