Chris@14: Chris@14: * Chris@14: * For the full copyright and license information, please view the LICENSE Chris@14: * file that was distributed with this source code. Chris@14: */ Chris@14: Chris@14: namespace SebastianBergmann\Diff\Output; Chris@14: Chris@14: abstract class AbstractChunkOutputBuilder implements DiffOutputBuilderInterface Chris@14: { Chris@14: /** Chris@14: * Takes input of the diff array and returns the common parts. Chris@14: * Iterates through diff line by line. Chris@14: * Chris@14: * @param array $diff Chris@14: * @param int $lineThreshold Chris@14: * Chris@14: * @return array Chris@14: */ Chris@14: protected function getCommonChunks(array $diff, int $lineThreshold = 5): array Chris@14: { Chris@14: $diffSize = \count($diff); Chris@14: $capturing = false; Chris@14: $chunkStart = 0; Chris@14: $chunkSize = 0; Chris@14: $commonChunks = []; Chris@14: Chris@14: for ($i = 0; $i < $diffSize; ++$i) { Chris@14: if ($diff[$i][1] === 0 /* OLD */) { Chris@14: if ($capturing === false) { Chris@14: $capturing = true; Chris@14: $chunkStart = $i; Chris@14: $chunkSize = 0; Chris@14: } else { Chris@14: ++$chunkSize; Chris@14: } Chris@14: } elseif ($capturing !== false) { Chris@14: if ($chunkSize >= $lineThreshold) { Chris@14: $commonChunks[$chunkStart] = $chunkStart + $chunkSize; Chris@14: } Chris@14: Chris@14: $capturing = false; Chris@14: } Chris@14: } Chris@14: Chris@14: if ($capturing !== false && $chunkSize >= $lineThreshold) { Chris@14: $commonChunks[$chunkStart] = $chunkStart + $chunkSize; Chris@14: } Chris@14: Chris@14: return $commonChunks; Chris@14: } Chris@14: }