MediaWiki master
HtmlHelper.php
Go to the documentation of this file.
1<?php
2
3namespace MediaWiki\Html;
4
6use Wikimedia\RemexHtml\HTMLData;
7use Wikimedia\RemexHtml\Serializer\HtmlFormatter;
8use Wikimedia\RemexHtml\Serializer\Serializer;
9use Wikimedia\RemexHtml\Tokenizer\Tokenizer;
10use Wikimedia\RemexHtml\TreeBuilder\Dispatcher;
11use Wikimedia\RemexHtml\TreeBuilder\TreeBuilder;
12
17
35 public static function modifyElements(
36 string $htmlFragment,
37 callable $shouldModifyCallback,
38 callable $modifyCallback,
39 bool $html5format = true
40 ) {
41 if ( $html5format ) {
42 $formatter = new class( [], $shouldModifyCallback, $modifyCallback ) extends HtmlFormatter {
44 };
45 } else {
46 $formatter = new class( [], $shouldModifyCallback, $modifyCallback ) extends RemexCompatFormatter {
48 };
49 }
50 $serializer = new Serializer( $formatter );
51 $treeBuilder = new TreeBuilder( $serializer, $html5format ? [] : [
52 'ignoreErrors' => true,
53 'ignoreNulls' => true,
54 ] );
55 $dispatcher = new Dispatcher( $treeBuilder );
56 $tokenizer = new Tokenizer( $dispatcher, $htmlFragment, $html5format ? [] : [
57 // RemexCompatFormatter expects 'ignoreCharRefs' to be used (T354361). The other options are
58 // for consistency with RemexDriver and supposedly improve performance.
59 'ignoreErrors' => true,
60 'ignoreCharRefs' => true,
61 'ignoreNulls' => true,
62 'skipPreprocess' => true,
63 ] );
64
65 $tokenizer->execute( [
66 'fragmentNamespace' => HTMLData::NS_HTML,
67 'fragmentName' => 'body',
68 ] );
69
70 return $serializer->getResult();
71 }
72
73}
Static utilities for manipulating HTML strings.
static modifyElements(string $htmlFragment, callable $shouldModifyCallback, callable $modifyCallback, bool $html5format=true)
Modify elements of an HTML fragment via a user-provided callback.
trait HtmlHelperTrait
Internal helper trait for HtmlHelper::modifyHtml.