Change the default settings
By default, template normalization consists in optimizing a template's content by removing superfluous whitespace and inlining content wherever possible, as well as normalize HTML elements' and attributes' names to lowercase and other menial tasks.
Template normalization is performed by $configurator->templateNormalizer
, which you can access as an array.
$configurator = new s9e\TextFormatter\Configurator;
foreach ($configurator->templateNormalizer as $i => $normalizer)
{
echo $i, "\t", get_class($normalizer), "\n";
}
0 s9e\TextFormatter\Configurator\TemplateNormalizations\PreserveSingleSpaces
1 s9e\TextFormatter\Configurator\TemplateNormalizations\RemoveComments
2 s9e\TextFormatter\Configurator\TemplateNormalizations\RemoveInterElementWhitespace
3 s9e\TextFormatter\Configurator\TemplateNormalizations\NormalizeElementNames
4 s9e\TextFormatter\Configurator\TemplateNormalizations\FixUnescapedCurlyBracesInHtmlAttributes
5 s9e\TextFormatter\Configurator\TemplateNormalizations\EnforceHTMLOmittedEndTags
6 s9e\TextFormatter\Configurator\TemplateNormalizations\InlineCDATA
7 s9e\TextFormatter\Configurator\TemplateNormalizations\InlineElements
8 s9e\TextFormatter\Configurator\TemplateNormalizations\InlineTextElements
9 s9e\TextFormatter\Configurator\TemplateNormalizations\UninlineAttributes
10 s9e\TextFormatter\Configurator\TemplateNormalizations\MinifyXPathExpressions
11 s9e\TextFormatter\Configurator\TemplateNormalizations\NormalizeAttributeNames
12 s9e\TextFormatter\Configurator\TemplateNormalizations\OptimizeConditionalAttributes
13 s9e\TextFormatter\Configurator\TemplateNormalizations\FoldArithmeticConstants
14 s9e\TextFormatter\Configurator\TemplateNormalizations\FoldConstantXPathExpressions
15 s9e\TextFormatter\Configurator\TemplateNormalizations\InlineXPathLiterals
16 s9e\TextFormatter\Configurator\TemplateNormalizations\DeoptimizeIf
17 s9e\TextFormatter\Configurator\TemplateNormalizations\OptimizeChooseDeadBranches
18 s9e\TextFormatter\Configurator\TemplateNormalizations\OptimizeChooseAttributes
19 s9e\TextFormatter\Configurator\TemplateNormalizations\OptimizeChooseText
20 s9e\TextFormatter\Configurator\TemplateNormalizations\OptimizeChoose
21 s9e\TextFormatter\Configurator\TemplateNormalizations\OptimizeConditionalValueOf
22 s9e\TextFormatter\Configurator\TemplateNormalizations\InlineAttributes
23 s9e\TextFormatter\Configurator\TemplateNormalizations\NormalizeUrls
24 s9e\TextFormatter\Configurator\TemplateNormalizations\InlineInferredValues
25 s9e\TextFormatter\Configurator\TemplateNormalizations\RenameLivePreviewEvent
26 s9e\TextFormatter\Configurator\TemplateNormalizations\SetRelNoreferrerOnTargetedLinks
27 s9e\TextFormatter\Configurator\TemplateNormalizations\MinifyInlineCSS
Remove a normalization
$configurator = new s9e\TextFormatter\Configurator;
echo $configurator->templateNormalizer->normalizeTemplate('<![CDATA[ Will be inlined ]]>'), "\n";
$configurator->templateNormalizer->remove('InlineCDATA');
echo $configurator->templateNormalizer->normalizeTemplate('<![CDATA[ Will not be inlined ]]>');
Will be inlined
Will not be inlined
Add your own custom normalization
You can append()
or prepend()
a callback to the template normalizer. It will be called with one argument, a DOMNode
that represents the <xsl:template/>
element that contains the template, which you can modify normally. At the end, the node is serialized back to XML.
The template normalizer iterates through the list of normalizations until none of them modifies the template or the internal iteration limit is reached. If you create a normalization that adds something to a template without testing whether it's already been added by a previous iteration, it will be run multiple times in a row.
$configurator = new s9e\TextFormatter\Configurator;
// Add a callback that adds a "?" to the template only if there isn't one already
$configurator->templateNormalizer->append(
function (DOMNode $template)
{
if (strpos($template->textContent, '?') === false)
{
$template->appendChild($template->ownerDocument->createTextNode('?'));
}
}
);
// Add a callback that adds a "!" to the template
$configurator->templateNormalizer->append(
function (DOMNode $template)
{
$template->appendChild($template->ownerDocument->createTextNode('!'));
}
);
echo $configurator->templateNormalizer->normalizeTemplate('Hello world');
Hello world?!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!