Merge "Improve docs for Title::getInternalURL/getCanonicalURL"
[lhc/web/wiklou.git] / includes / tidy / RemexDriver.php
index e02af88..803369a 100644 (file)
@@ -3,37 +3,50 @@
 namespace MediaWiki\Tidy;
 
 use RemexHtml\Serializer\Serializer;
+use RemexHtml\Serializer\SerializerWithTracer;
 use RemexHtml\Tokenizer\Tokenizer;
 use RemexHtml\TreeBuilder\Dispatcher;
 use RemexHtml\TreeBuilder\TreeBuilder;
 use RemexHtml\TreeBuilder\TreeMutationTracer;
 
 class RemexDriver extends TidyDriverBase {
-       private $trace;
+       private $treeMutationTrace;
+       private $serializerTrace;
+       private $mungerTrace;
        private $pwrap;
 
        public function __construct( array $config ) {
                $config += [
                        'treeMutationTrace' => false,
+                       'serializerTrace' => false,
+                       'mungerTrace' => false,
                        'pwrap' => true
                ];
-               $this->trace = $config['treeMutationTrace'];
+               $this->treeMutationTrace = $config['treeMutationTrace'];
+               $this->serializerTrace = $config['serializerTrace'];
+               $this->mungerTrace = $config['mungerTrace'];
                $this->pwrap = $config['pwrap'];
                parent::__construct( $config );
        }
 
        public function tidy( $text ) {
+               $traceCallback = function ( $msg ) {
+                       wfDebug( "RemexHtml: $msg" );
+               };
+
                $formatter = new RemexCompatFormatter;
-               $serializer = new Serializer( $formatter );
+               if ( $this->serializerTrace ) {
+                       $serializer = new SerializerWithTracer( $formatter, null, $traceCallback );
+               } else {
+                       $serializer = new Serializer( $formatter );
+               }
                if ( $this->pwrap ) {
-                       $munger = new RemexCompatMunger( $serializer );
+                       $munger = new RemexCompatMunger( $serializer, $this->mungerTrace );
                } else {
                        $munger = $serializer;
                }
-               if ( $this->trace ) {
-                       $tracer = new TreeMutationTracer( $munger, function ( $msg ) {
-                               wfDebug( "RemexHtml: $msg" );
-                       } );
+               if ( $this->treeMutationTrace ) {
+                       $tracer = new TreeMutationTracer( $munger, $traceCallback );
                } else {
                        $tracer = $munger;
                }
@@ -48,6 +61,7 @@ class RemexDriver extends TidyDriverBase {
                        'ignoreNulls' => true,
                        'skipPreprocess' => true,
                ] );
+
                $tokenizer->execute( [
                        'fragmentNamespace' => \RemexHtml\HTMLData::NS_HTML,
                        'fragmentName' => 'body'