diff --git a/vendor/indent/parser.php b/vendor/indent/parser.php
new file mode 100644
index 0000000..cf5f262
--- /dev/null
+++ b/vendor/indent/parser.php
@@ -0,0 +1,214 @@
+'.$m[2].'';
+}
+
+function scriptSecure($m)
+{
+ $m[2] = str_replace(
+ array('<', '>'),
+ array('%inf%', '%sup%'),
+ $m[2]
+ );
+
+ return '';
+}
+
+function scriptUnSecure($m)
+{
+ $m[2] = str_replace(
+ array('%inf%', '%sup%'),
+ array('<', '>'),
+ $m[2]
+ );
+
+ return '';
+}
+
+function scriptDecode($m)
+{
+ return '';
+}
+
+function styleEncode($m)
+{
+ $m[2] = urlencode($m[2]);
+
+ return '';
+}
+
+function styleSecure($m)
+{
+ $m[2] = str_replace(
+ array('<', '>'),
+ array('%inf%', '%sup%'),
+ $m[2]
+ );
+
+ return '';
+}
+
+function styleUnSecure($m)
+{
+ $m[2] = str_replace(
+ array('%inf%', '%sup%'),
+ array('<', '>'),
+ $m[2]
+ );
+
+ return '';
+}
+
+function styleDecode($m)
+{
+ return '';
+}
+
+function phpEncode($m)
+{
+ $m[1] = urlencode($m[1]);
+
+ return '';
+}
+
+function phpSecure($m)
+{
+ $m[1] = str_replace(
+ array('<', '>'),
+ array('%inf%', '%sup%'),
+ $m[1]
+ );
+
+ return '';
+}
+
+function phpUnSecure($m)
+{
+ $m[1] = str_replace(
+ array('%inf%', '%sup%'),
+ array('<', '>'),
+ $m[1]
+ );
+
+ return '';
+}
+
+function phpDecode($m)
+{
+ return '';
+}
+
+function minimize($m)
+{
+ if (isset($m[2], $m[3])) {
+ return '<'.$m[1].$m[2].$m[3].'>'.trim($m[4]).''.$m[1].'>';
+ }
+
+ return '<'.$m[1].'>'.trim($m[2]).''.$m[1].'>';
+}
+
+function indent($str)
+{
+ $lines = preg_replace_callback('``isU', 'scriptEncode', $str);
+ $lines = preg_replace_callback('``isU', 'styleEncode', $lines);
+ $lines = preg_replace_callback('`<\?php(.*)\?>`isU', 'phpEncode', $lines);
+
+ $lines = explode("\n", $lines);
+
+ foreach ($lines as $k=>$line) {
+ $lines[$k] = trim($line);
+ if (empty($lines[$k])) {
+ unset($lines[$k]);
+ }
+ }
+
+ $html = implode("\n", $lines);
+
+ $html = preg_replace_callback('``isU', 'scriptDecode', $html);
+ $html = preg_replace_callback('``isU', 'styleDecode', $html);
+ $html = preg_replace_callback('`<\?php(.*)\?>`isU', 'phpDecode', $html);
+
+ $html = preg_replace_callback('``isU', 'scriptSecure', $html);
+ $html = preg_replace_callback('``isU', 'styleSecure', $html);
+ $html = preg_replace_callback('`<\?php(.*)\?>`isU', 'phpSecure', $html);
+
+ $html = str_replace("\r", '', $html);
+
+ //$html = preg_replace_callback('``isU', 'scriptB', $html);
+
+ $strlen = strlen($html);
+ $newhtml = '';
+ $tabnum = -1;
+ $auto_closed = false;
+
+ for ($u=0; $u<$strlen; $u++) {
+ $balise = false;
+
+ if ($html[$u] == '<') {
+ if ($html[$u+1] == '/') {
+ $newhtml.= "\n".str_repeat("\t", max(0, $tabnum--));
+ } elseif ($html[$u+1] != '!') {
+ $newhtml.= "\n".str_repeat("\t", ++$tabnum);
+ } elseif ($html[$u+1] == '!') {
+ $newhtml.= "\n".str_repeat("\t", $tabnum+1);
+ }
+
+ $balise = true;
+
+ if(
+ (isset($html[$u+1], $html[$u+2], $html[$u+3]) && strtolower($html[$u+1].$html[$u+2].$html[$u+3]) == 'img')
+ ||
+ (isset($html[$u+1], $html[$u+2], $html[$u+3], $html[$u+4], $html[$u+5]) && strtolower($html[$u+1].$html[$u+2].$html[$u+3].$html[$u+4].$html[$u+5]) == 'input')
+ ||
+ (isset($html[$u+1], $html[$u+2], $html[$u+3], $html[$u+4]) && strtolower($html[$u+1].$html[$u+2].$html[$u+3].$html[$u+4]) == 'link')
+ ||
+ (isset($html[$u+1], $html[$u+2], $html[$u+3], $html[$u+4]) && strtolower($html[$u+1].$html[$u+2].$html[$u+3].$html[$u+4]) == 'meta')
+ ||
+ (isset($html[$u+1], $html[$u+2]) && strtolower($html[$u+1].$html[$u+2]) == 'hr')
+ ||
+ (isset($html[$u+1], $html[$u+2]) && strtolower($html[$u+1].$html[$u+2]) == 'br')
+ ) {
+ --$tabnum;
+ $auto_closed = true;
+ }
+ }
+
+ if (isset($html[$u-1]) && $html[$u-1] == "\n" && !$balise) {
+ $newhtml.= str_repeat("\t", $tabnum+1);
+ }
+
+ $newhtml.= $html[$u];
+
+ if ($html[$u] == '>' && $html[$u-2].$html[$u-1] != '--') {
+ if ($html[$u-1] == '/' && !$auto_closed) {
+ $tabnum--;
+ }
+
+ $newhtml.= "\n".str_repeat("\t", max(0, $tabnum+1));
+ }
+ }
+
+ $newhtml = preg_replace_callback('``isU', 'scriptUnSecure', $newhtml);
+ $newhtml = preg_replace_callback('``isU', 'styleUnSecure', $newhtml);
+ $newhtml = preg_replace_callback('`<\?php(.*)\?>`isU', 'phpUnSecure', $newhtml);
+
+ $newhtml = explode("\n", $newhtml);
+
+ foreach ($newhtml as $k=>$line) {
+ if (trim($line) == '') {
+ unset($newhtml[$k]);
+ }
+ }
+
+ $newhtml = implode("\n", $newhtml);
+ $newhtml = preg_replace("\n{2,}", "\n", $newhtml);
+
+ $newhtml = preg_replace_callback('`<([^>]+)>([^<]+)\1>`isU', 'minimize', $newhtml);
+ $newhtml = preg_replace_callback('`<([^\s]+)(\s+)([^>]+)>([^<]+)\1>`isU', 'minimize', $newhtml);
+
+ return utf8_decode($newhtml);
+}