Merge "Http::getProxy() method to get proxy configuration"
[lhc/web/wiklou.git] / includes / diff / DiffFormatter.php
index 40df0d7..4b44b3c 100644 (file)
@@ -49,6 +49,9 @@ abstract class DiffFormatter {
         */
        protected $trailingContextLines = 0;
 
+       /** @var string The output buffer; holds the output while it is built. */
+       private $result = '';
+
        /**
         * Format a diff.
         *
@@ -57,11 +60,10 @@ abstract class DiffFormatter {
         * @return string The formatted output.
         */
        public function format( $diff ) {
-               wfProfileIn( __METHOD__ );
 
                $xi = $yi = 1;
                $block = false;
-               $context = array();
+               $context = [];
 
                $nlead = $this->leadingContextLines;
                $ntrail = $this->trailingContextLines;
@@ -92,7 +94,7 @@ abstract class DiffFormatter {
                                        $context = array_slice( $context, count( $context ) - $nlead );
                                        $x0 = $xi - count( $context );
                                        $y0 = $yi - count( $context );
-                                       $block = array();
+                                       $block = [];
                                        if ( $context ) {
                                                $block[] = new DiffOpCopy( $context );
                                        }
@@ -115,7 +117,6 @@ abstract class DiffFormatter {
                }
 
                $end = $this->endDiff();
-               wfProfileOut( __METHOD__ );
 
                return $end;
        }
@@ -130,7 +131,6 @@ abstract class DiffFormatter {
         * @throws MWException If the edit type is not known.
         */
        protected function block( $xbeg, $xlen, $ybeg, $ylen, &$edits ) {
-               wfProfileIn( __METHOD__ );
                $this->startBlock( $this->blockHeader( $xbeg, $xlen, $ybeg, $ylen ) );
                foreach ( $edits as $edit ) {
                        if ( $edit->type == 'copy' ) {
@@ -146,19 +146,27 @@ abstract class DiffFormatter {
                        }
                }
                $this->endBlock();
-               wfProfileOut( __METHOD__ );
        }
 
        protected function startDiff() {
-               ob_start();
+               $this->result = '';
+       }
+
+       /**
+        * Writes a string to the output buffer.
+        *
+        * @param string $text
+        */
+       protected function writeOutput( $text ) {
+               $this->result .= $text;
        }
 
        /**
         * @return string
         */
        protected function endDiff() {
-               $val = ob_get_contents();
-               ob_end_clean();
+               $val = $this->result;
+               $this->result = '';
 
                return $val;
        }
@@ -189,7 +197,7 @@ abstract class DiffFormatter {
         * @param string $header
         */
        protected function startBlock( $header ) {
-               echo $header . "\n";
+               $this->writeOutput( $header . "\n" );
        }
 
        /**
@@ -207,7 +215,7 @@ abstract class DiffFormatter {
         */
        protected function lines( $lines, $prefix = ' ' ) {
                foreach ( $lines as $line ) {
-                       echo "$prefix $line\n";
+                       $this->writeOutput( "$prefix $line\n" );
                }
        }
 
@@ -240,7 +248,7 @@ abstract class DiffFormatter {
         */
        protected function changed( $orig, $closing ) {
                $this->deleted( $orig );
-               echo "---\n";
+               $this->writeOutput( "---\n" );
                $this->added( $closing );
        }