Merge "Add some translations for Western Punjabi (pnb)"
[lhc/web/wiklou.git] / includes / tidy / RemexDriver.php
1 <?php
2
3 namespace MediaWiki\Tidy;
4
5 use RemexHtml\Serializer\Serializer;
6 use RemexHtml\Tokenizer\Tokenizer;
7 use RemexHtml\TreeBuilder\Dispatcher;
8 use RemexHtml\TreeBuilder\TreeBuilder;
9 use RemexHtml\TreeBuilder\TreeMutationTracer;
10
11 class RemexDriver extends TidyDriverBase {
12 private $trace;
13 private $pwrap;
14
15 public function __construct( array $config ) {
16 $config += [
17 'treeMutationTrace' => false,
18 'pwrap' => true
19 ];
20 $this->trace = $config['treeMutationTrace'];
21 $this->pwrap = $config['pwrap'];
22 parent::__construct( $config );
23 }
24
25 public function tidy( $text ) {
26 $formatter = new RemexCompatFormatter;
27 $serializer = new Serializer( $formatter );
28 if ( $this->pwrap ) {
29 $munger = new RemexCompatMunger( $serializer );
30 } else {
31 $munger = $serializer;
32 }
33 if ( $this->trace ) {
34 $tracer = new TreeMutationTracer( $munger, function ( $msg ) {
35 wfDebug( "RemexHtml: $msg" );
36 } );
37 } else {
38 $tracer = $munger;
39 }
40 $treeBuilder = new TreeBuilder( $tracer, [
41 'ignoreErrors' => true,
42 'ignoreNulls' => true,
43 ] );
44 $dispatcher = new Dispatcher( $treeBuilder );
45 $tokenizer = new Tokenizer( $dispatcher, $text, [
46 'ignoreErrors' => true,
47 'ignoreCharRefs' => true,
48 'ignoreNulls' => true,
49 'skipPreprocess' => true,
50 ] );
51 $tokenizer->execute( [
52 'fragmentNamespace' => \RemexHtml\HTMLData::NS_HTML,
53 'fragmentName' => 'body'
54 ] );
55 return $serializer->getResult();
56 }
57 }