aboutsummaryrefslogtreecommitdiffstats
path: root/includes/diff
diff options
context:
space:
mode:
authorKevin Israel <pleasestand@live.com>2015-10-08 23:17:50 -0400
committerKevin Israel <pleasestand@live.com>2016-01-27 19:31:17 -0500
commit2476589b267c65d30176cfe23414e0178774e255 (patch)
tree2bcc20d4b46a204b070115dea3158c5ba66f0667 /includes/diff
parent5346065e0222004cd4293ad33ae331280ce86e2b (diff)
downloadmediawikicore-2476589b267c65d30176cfe23414e0178774e255.tar.gz
mediawikicore-2476589b267c65d30176cfe23414e0178774e255.zip
DiffFormatter: Don't mess with PHP output buffering
This is a line-by-line conversion to append to a string property rather than print into a PHP output buffer. The changes to the base class break subclasses such as MobileFrontend's InlineDiffFormatter, which is updated in I81dd01cb. Depends-On: I81dd01cbb9ce11b87115fb1fed511027aee436a1 Change-Id: Idf2a6c593b81a152edec923d4db6272ca1f3f545
Diffstat (limited to 'includes/diff')
-rw-r--r--includes/diff/DiffFormatter.php24
-rw-r--r--includes/diff/TableDiffFormatter.php22
-rw-r--r--includes/diff/UnifiedDiffFormatter.php2
3 files changed, 30 insertions, 18 deletions
diff --git a/includes/diff/DiffFormatter.php b/includes/diff/DiffFormatter.php
index 33ca931fdb58..23e39ea73bd3 100644
--- a/includes/diff/DiffFormatter.php
+++ b/includes/diff/DiffFormatter.php
@@ -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.
*
@@ -146,15 +149,24 @@ abstract class DiffFormatter {
}
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;
}
@@ -185,7 +197,7 @@ abstract class DiffFormatter {
* @param string $header
*/
protected function startBlock( $header ) {
- echo $header . "\n";
+ $this->writeOutput( $header . "\n" );
}
/**
@@ -203,7 +215,7 @@ abstract class DiffFormatter {
*/
protected function lines( $lines, $prefix = ' ' ) {
foreach ( $lines as $line ) {
- echo "$prefix $line\n";
+ $this->writeOutput( "$prefix $line\n" );
}
}
@@ -236,7 +248,7 @@ abstract class DiffFormatter {
*/
protected function changed( $orig, $closing ) {
$this->deleted( $orig );
- echo "---\n";
+ $this->writeOutput( "---\n" );
$this->added( $closing );
}
diff --git a/includes/diff/TableDiffFormatter.php b/includes/diff/TableDiffFormatter.php
index be38e8759c3d..f1826edc5ec8 100644
--- a/includes/diff/TableDiffFormatter.php
+++ b/includes/diff/TableDiffFormatter.php
@@ -80,7 +80,7 @@ class TableDiffFormatter extends DiffFormatter {
* @param string $header
*/
protected function startBlock( $header ) {
- echo $header;
+ $this->writeOutput( $header );
}
protected function endBlock() {
@@ -157,9 +157,9 @@ class TableDiffFormatter extends DiffFormatter {
*/
protected function added( $lines ) {
foreach ( $lines as $line ) {
- echo '<tr>' . $this->emptyLine() .
+ $this->writeOutput( '<tr>' . $this->emptyLine() .
$this->addedLine( '<ins class="diffchange">' .
- htmlspecialchars( $line ) . '</ins>' ) . "</tr>\n";
+ htmlspecialchars( $line ) . '</ins>' ) . "</tr>\n" );
}
}
@@ -170,9 +170,9 @@ class TableDiffFormatter extends DiffFormatter {
*/
protected function deleted( $lines ) {
foreach ( $lines as $line ) {
- echo '<tr>' . $this->deletedLine( '<del class="diffchange">' .
+ $this->writeOutput( '<tr>' . $this->deletedLine( '<del class="diffchange">' .
htmlspecialchars( $line ) . '</del>' ) .
- $this->emptyLine() . "</tr>\n";
+ $this->emptyLine() . "</tr>\n" );
}
}
@@ -183,9 +183,9 @@ class TableDiffFormatter extends DiffFormatter {
*/
protected function context( $lines ) {
foreach ( $lines as $line ) {
- echo '<tr>' .
+ $this->writeOutput( '<tr>' .
$this->contextLine( htmlspecialchars( $line ) ) .
- $this->contextLine( htmlspecialchars( $line ) ) . "</tr>\n";
+ $this->contextLine( htmlspecialchars( $line ) ) . "</tr>\n" );
}
}
@@ -207,13 +207,13 @@ class TableDiffFormatter extends DiffFormatter {
$line = array_shift( $del );
while ( $line ) {
$aline = array_shift( $add );
- echo '<tr>' . $this->deletedLine( $line ) .
- $this->addedLine( $aline ) . "</tr>\n";
+ $this->writeOutput( '<tr>' . $this->deletedLine( $line ) .
+ $this->addedLine( $aline ) . "</tr>\n" );
$line = array_shift( $del );
}
foreach ( $add as $line ) { # If any leftovers
- echo '<tr>' . $this->emptyLine() .
- $this->addedLine( $line ) . "</tr>\n";
+ $this->writeOutput( '<tr>' . $this->emptyLine() .
+ $this->addedLine( $line ) . "</tr>\n" );
}
}
diff --git a/includes/diff/UnifiedDiffFormatter.php b/includes/diff/UnifiedDiffFormatter.php
index 5f3ad3d7bb8a..72f1a6603475 100644
--- a/includes/diff/UnifiedDiffFormatter.php
+++ b/includes/diff/UnifiedDiffFormatter.php
@@ -42,7 +42,7 @@ class UnifiedDiffFormatter extends DiffFormatter {
*/
protected function lines( $lines, $prefix = ' ' ) {
foreach ( $lines as $line ) {
- echo "{$prefix}{$line}\n";
+ $this->writeOutput( "{$prefix}{$line}\n" );
}
}