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
34 public static function modifyElements(
35 string $htmlFragment,
36 callable $shouldModifyCallback,
37 callable $modifyCallback,
38 bool $html5format = true
39 ) {
40 if ( $html5format ) {
41 $formatter = new class( [], $shouldModifyCallback, $modifyCallback ) extends HtmlFormatter {
43 };
44 } else {
45 $formatter = new class( [], $shouldModifyCallback, $modifyCallback ) extends RemexCompatFormatter {
47 };
48 }
49 $serializer = new Serializer( $formatter );
50 $treeBuilder = new TreeBuilder( $serializer, $html5format ? [] : [
51 'ignoreErrors' => true,
52 'ignoreNulls' => true,
53 ] );
54 $dispatcher = new Dispatcher( $treeBuilder );
55 $tokenizer = new Tokenizer( $dispatcher, $htmlFragment, $html5format ? [] : [
56 // RemexCompatFormatter expects 'ignoreCharRefs' to be used (T354361). The other options are
57 // for consistency with RemexDriver and supposedly improve performance.
58 'ignoreErrors' => true,
59 'ignoreCharRefs' => true,
60 'ignoreNulls' => true,
61 'skipPreprocess' => true,
62 ] );
63
64 $tokenizer->execute( [
65 'fragmentNamespace' => HTMLData::NS_HTML,
66 'fragmentName' => 'body',
67 ] );
68
69 return $serializer->getResult();
70 }
71
72}
73
75class_alias( HtmlHelper::class, 'MediaWiki\\HtmlHelper' );
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.