]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blobdiff - vendor/wikimedia/remex-html/RemexHtml/Serializer/DepurateFormatter.php
MediaWiki 1.30.2
[autoinstallsdev/mediawiki.git] / vendor / wikimedia / remex-html / RemexHtml / Serializer / DepurateFormatter.php
diff --git a/vendor/wikimedia/remex-html/RemexHtml/Serializer/DepurateFormatter.php b/vendor/wikimedia/remex-html/RemexHtml/Serializer/DepurateFormatter.php
new file mode 100644 (file)
index 0000000..c71ee34
--- /dev/null
@@ -0,0 +1,42 @@
+<?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"] = '&#160;';
+       }
+
+       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;
+       }
+}