'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 ) {
}
private function trace( $msg ) {
- // echo "[RCM] $msg\n";
+ if ( $this->trace ) {
+ wfDebug( "[RCM] $msg" );
+ }
}
/**
) {
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,
$root = $serializer->getRootNode();
$nodes = [];
$removableNodes = [];
- $haveContent = false;
while ( $node !== $cloneEnd ) {
$nextParent = $serializer->getParentNode( $node );
if ( $nextParent === $root ) {
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;
}
'ignoreNulls' => true,
'skipPreprocess' => true,
] );
+
$tokenizer->execute( [
'fragmentNamespace' => \RemexHtml\HTMLData::NS_HTML,
'fragmentName' => 'body'