From 690bc4cb6ae9125784213ec5e2418f25f5803bb4 Mon Sep 17 00:00:00 2001 From: Tim Starling Date: Mon, 6 Aug 2018 12:15:25 +1000 Subject: [PATCH] RemexDriver: improved tracing 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 | 18 ++++++++++++----- includes/tidy/RemexDriver.php | 30 +++++++++++++++++++++-------- 2 files changed, 35 insertions(+), 13 deletions(-) diff --git a/includes/tidy/RemexCompatMunger.php b/includes/tidy/RemexCompatMunger.php index e6351e2e31..78a11045ed 100644 --- a/includes/tidy/RemexCompatMunger.php +++ b/includes/tidy/RemexCompatMunger.php @@ -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 ) { diff --git a/includes/tidy/RemexDriver.php b/includes/tidy/RemexDriver.php index e02af88fd9..803369a654 100644 --- a/includes/tidy/RemexDriver.php +++ b/includes/tidy/RemexDriver.php @@ -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' -- 2.20.1