annotate vendor/sebastian/diff/src/Output/DiffOnlyOutputBuilder.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 1fec387a4317
children
rev   line source
Chris@14 1 <?php declare(strict_types=1);
Chris@14 2 /*
Chris@14 3 * This file is part of sebastian/diff.
Chris@14 4 *
Chris@14 5 * (c) Sebastian Bergmann <sebastian@phpunit.de>
Chris@14 6 *
Chris@14 7 * For the full copyright and license information, please view the LICENSE
Chris@14 8 * file that was distributed with this source code.
Chris@14 9 */
Chris@14 10 namespace SebastianBergmann\Diff\Output;
Chris@14 11
Chris@14 12 /**
Chris@14 13 * Builds a diff string representation in a loose unified diff format
Chris@14 14 * listing only changes lines. Does not include line numbers.
Chris@14 15 */
Chris@14 16 final class DiffOnlyOutputBuilder implements DiffOutputBuilderInterface
Chris@14 17 {
Chris@14 18 /**
Chris@14 19 * @var string
Chris@14 20 */
Chris@14 21 private $header;
Chris@14 22
Chris@14 23 public function __construct(string $header = "--- Original\n+++ New\n")
Chris@14 24 {
Chris@14 25 $this->header = $header;
Chris@14 26 }
Chris@14 27
Chris@14 28 public function getDiff(array $diff): string
Chris@14 29 {
Chris@14 30 $buffer = \fopen('php://memory', 'r+b');
Chris@14 31
Chris@14 32 if ('' !== $this->header) {
Chris@14 33 \fwrite($buffer, $this->header);
Chris@14 34 if ("\n" !== \substr($this->header, -1, 1)) {
Chris@14 35 \fwrite($buffer, "\n");
Chris@14 36 }
Chris@14 37 }
Chris@14 38
Chris@14 39 foreach ($diff as $diffEntry) {
Chris@14 40 if ($diffEntry[1] === 1 /* ADDED */) {
Chris@14 41 \fwrite($buffer, '+' . $diffEntry[0]);
Chris@14 42 } elseif ($diffEntry[1] === 2 /* REMOVED */) {
Chris@14 43 \fwrite($buffer, '-' . $diffEntry[0]);
Chris@14 44 } elseif ($diffEntry[1] === 3 /* WARNING */) {
Chris@14 45 \fwrite($buffer, ' ' . $diffEntry[0]);
Chris@14 46
Chris@14 47 continue; // Warnings should not be tested for line break, it will always be there
Chris@14 48 } else { /* Not changed (old) 0 */
Chris@14 49 continue; // we didn't write the non changs line, so do not add a line break either
Chris@14 50 }
Chris@14 51
Chris@14 52 $lc = \substr($diffEntry[0], -1);
Chris@14 53 if ($lc !== "\n" && $lc !== "\r") {
Chris@14 54 \fwrite($buffer, "\n"); // \No newline at end of file
Chris@14 55 }
Chris@14 56 }
Chris@14 57
Chris@14 58 $diff = \stream_get_contents($buffer, -1, 0);
Chris@14 59 \fclose($buffer);
Chris@14 60
Chris@14 61 return $diff;
Chris@14 62 }
Chris@14 63 }