differ = new Differ(new UnifiedDiffOutputBuilder("--- Original\n+++ Healed\n")); } /** * Generate a colorized git-style unified diff string. * * @param string $original * @param string $fixed * @return string */ public function generate(string $original, string $fixed): string { $diff = $this->differ->diff($original, $fixed); $lines = explode("\n", $diff); $colorized = []; foreach ($lines as $line) { if (str_starts_with($line, '+') && !str_starts_with($line, '+++')) { $colorized[] = "" . htmlspecialchars($line) . ""; } elseif (str_starts_with($line, '-') && !str_starts_with($line, '---')) { $colorized[] = "" . htmlspecialchars($line) . ""; } elseif (str_starts_with($line, '@@')) { $colorized[] = "" . htmlspecialchars($line) . ""; } elseif (str_starts_with($line, '---') || str_starts_with($line, '+++')) { $colorized[] = "" . htmlspecialchars($line) . ""; } else { $colorized[] = htmlspecialchars($line); } } return implode("\n", $colorized); } }