--- /dev/null
+<?php
+
+namespace RemexHtml\Serializer;
+use RemexHtml\HTMLData;
+
+/**
+ * A formatter which produces a serialization extremely similar to the
+ * Html5Depurate service, which uses the validator.nu library for tree
+ * construction.
+ *
+ * For use in comparative testing.
+ *
+ * https://www.mediawiki.org/wiki/Html5Depurate
+ */
+class DepurateFormatter extends HtmlFormatter {
+ public function __construct( $options = [] ) {
+ parent::__construct( $options );
+ $this->textEscapes["\xc2\xa0"] = ' ';
+ }
+
+ public function element( SerializerNode $parent, SerializerNode $node, $contents ) {
+ $name = $node->name;
+ $s = "<$name";
+ foreach ( $node->attrs->getValues() as $attrName => $attrValue ) {
+ $encValue = strtr( $attrValue, $this->attributeEscapes );
+ $s .= " $attrName=\"$encValue\"";
+ }
+ if ( $node->namespace === HTMLData::NS_HTML ) {
+ if ( isset( $this->prefixLfElements[$name] )
+ ) {
+ $s .= ">\n$contents</$name>";
+ } elseif ( !isset( $this->voidElements[$name] ) ) {
+ $s .= ">$contents</$name>";
+ } else {
+ $s .= " />";
+ }
+ } else {
+ $s .= ">$contents</$name>";
+ }
+ return $s;
+ }
+}