Browse Source

Add handling for backspace chars in BufferIO

Jordi Boggiano 12 years ago
parent
commit
b7fb60494d
1 changed files with 14 additions and 1 deletions
  1. 14 1
      src/Composer/IO/BufferIO.php

+ 14 - 1
src/Composer/IO/BufferIO.php

@@ -40,6 +40,19 @@ class BufferIO extends ConsoleIO
     {
         fseek($this->output->getStream(), 0);
 
-        return stream_get_contents($this->output->getStream());
+        $output = stream_get_contents($this->output->getStream());
+
+        $output = preg_replace_callback("{(?<=^|\n|\x08)(.+?)(\x08+)}", function ($matches) {
+            $pre = strip_tags($matches[1]);
+
+            if (strlen($pre) === strlen($matches[2])) {
+                return '';
+            }
+
+            // TODO reverse parse the string, skipping span tags and \033\[([0-9;]+)m(.*?)\033\[0m style blobs
+            return rtrim($matches[1])."\n";
+        }, $output);
+
+        return $output;
     }
 }