* You may copy this code freely under the conditions of the GPL. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * http://www.gnu.org/copyleft/gpl.html * * @file * @ingroup DifferenceEngine */ /** * MediaWiki default table style diff formatter * @todo document * @newable * @ingroup DifferenceEngine */ class TableDiffFormatter extends DiffFormatter { public function __construct() { $this->leadingContextLines = 2; $this->trailingContextLines = 2; } /** * @param string $msg * * @return string */ public static function escapeWhiteSpace( $msg ) { $msg = preg_replace( '/^ /m', "\u{00A0} ", $msg ); $msg = preg_replace( '/ $/m', " \u{00A0}", $msg ); $msg = preg_replace( '/ /', "\u{00A0} ", $msg ); return $msg; } /** * @param int $xbeg * @param int $xlen * @param int $ybeg * @param int $ylen * * @return string */ protected function blockHeader( $xbeg, $xlen, $ybeg, $ylen ) { // '' get replaced by a localised line number // in DifferenceEngine::localiseLineNumbers return Html::rawElement( 'tr', [], Html::rawElement( 'td', [ 'colspan' => '2', 'class' => 'diff-lineno', 'id' => 'mw-diff-left-l' . $xbeg ], '' ) . "\n" . Html::rawElement( 'td', [ 'colspan' => '2', 'class' => 'diff-lineno' ], '' ) ) . "\n"; } /** @inheritDoc */ protected function startBlock( $header ) { $this->writeOutput( $header ); } /** @inheritDoc */ protected function endBlock() { } /** * @param string[] $lines * @param string $prefix * @param string $color */ protected function lines( $lines, $prefix = ' ', $color = 'white' ) { } /** * HTML-escape parameter before calling this * * @param string $line * * @return string */ protected function addedLine( $line ) { return $this->wrapLine( '+', 'diff-addedline', $line ); } /** * HTML-escape parameter before calling this * * @param string $line * * @return string */ protected function deletedLine( $line ) { return $this->wrapLine( '−', 'diff-deletedline', $line ); } /** * HTML-escape parameter before calling this * * @param string $line * * @return string */ protected function contextLine( $line ) { return $this->wrapLine( '', 'diff-context', $line ); } /** * @param string $marker * @param string $class Unused * @param string $line * * @return string */ protected function wrapLine( $marker, $class, $line ) { if ( $line !== '' ) { // The