RemexDriver: improved tracing
authorTim Starling <tstarling@wikimedia.org>
Mon, 6 Aug 2018 02:15:25 +0000 (12:15 +1000)
committerKunal Mehta <legoktm@member.fsf.org>
Tue, 14 Aug 2018 20:40:11 +0000 (13:40 -0700)
Use the new RemexHtml trace features. Add two more tracing modes.

Fix missing member variable declarations and remove unused local
variables.

Change-Id: I512462e1019f9a466684abfa4aab7697b324d5b1

includes/tidy/RemexCompatMunger.php
includes/tidy/RemexDriver.php

index e6351e2..78a1104 100644 (file)
@@ -89,11 +89,19 @@ class RemexCompatMunger implements TreeHandler {
                'u' => true,
        ];
 
+       /** @var Serializer */
+       private $serializer;
+
+       /** @var bool */
+       private $trace;
+
        /**
         * @param Serializer $serializer
+        * @param bool $trace
         */
-       public function __construct( Serializer $serializer ) {
+       public function __construct( Serializer $serializer, $trace = false ) {
                $this->serializer = $serializer;
+               $this->trace = $trace;
        }
 
        public function startDocument( $fragmentNamespace, $fragmentName ) {
@@ -184,7 +192,9 @@ class RemexCompatMunger implements TreeHandler {
        }
 
        private function trace( $msg ) {
-               // echo "[RCM] $msg\n";
+               if ( $this->trace ) {
+                       wfDebug( "[RCM] $msg" );
+               }
        }
 
        /**
@@ -245,12 +255,11 @@ class RemexCompatMunger implements TreeHandler {
        ) {
                list( $parent, $newRef ) = $this->getParentForInsert( $preposition, $refElement );
                $parentData = $parent->snData;
-               $parentNs = $parent->namespace;
-               $parentName = $parent->name;
                $elementName = $element->htmlName;
 
                $inline = isset( self::$onlyInlineElements[$elementName] );
                $under = $preposition === TreeBuilder::UNDER;
+               $elementToEnd = null;
 
                if ( $under && $parentData->isPWrapper && !$inline ) {
                        // [B/b] The element is non-inline and the parent is a p-wrapper,
@@ -349,7 +358,6 @@ class RemexCompatMunger implements TreeHandler {
                $root = $serializer->getRootNode();
                $nodes = [];
                $removableNodes = [];
-               $haveContent = false;
                while ( $node !== $cloneEnd ) {
                        $nextParent = $serializer->getParentNode( $node );
                        if ( $nextParent === $root ) {
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'