# stolen at http://www.perlmonks.org/index.pl?node_id=115928
# as well as the get and escapeHTML functions
# get options and file contents as array refs
my $old = get($old_file, 1, 1);
my $new = get($file, 1, 1);
open (SDIFF, "> $result_file") || &Error("Can't open $result_file: $!");
# print out the colour coded diff - common code is black
# code in $old_file but not $new_file is (bg) red
# code in $new_file but not $old_file is (bg) green
print SDIFF "
| Color Key: |
";
print SDIFF "| ".escapeHTML($old_file)." |
";
print SDIFF "| ".escapeHTML($file)." |
\n";
print SDIFF "
";
my $a;
my $b;
my $a_lines;
my $b_lines;
traverse_sequences({
MATCH => sub
{
if ($a)
{
if ($b)
{
#$b_lines to compare with $a_lines
# print a_lines with hilited diffs
print SDIFF "| ";
my @a_table=split(/ */, $a_lines);
my @b_table=split(/ */, $b_lines);
traverse_sequences(
{
MATCH => sub { print SDIFF escapeHTML($a_table[$_[0]]) },
DISCARD_A => sub { print SDIFF "" . escapeHTML($a_table[$_[0]]).""},
DISCARD_B => sub { print SDIFF "" },
},
\@a_table, \@b_table,);
print SDIFF " |
";
# now print b_lines with hilited diffs
print SDIFF "| ";
traverse_sequences(
{
MATCH => sub { print SDIFF escapeHTML($b_table[$_[1]]) },
DISCARD_A => sub { print SDIFF ""},
DISCARD_B => sub { print SDIFF "" . escapeHTML($b_table[$_[1]])."" },
},
\@a_table, \@b_table,);
print SDIFF " |
";
$b=0;
$b_lines="";
}
else
{
print SDIFF "| ".escapeHTML($a_lines)." |
";
}
$a=0;
$a_lines="";
}
else
{
if ($b)
{
print SDIFF "| ".escapeHTML($b_lines)." |
";
$b=0;
$b_lines="";
}
}
print SDIFF "| ".escapeHTML($old->[$_[0]])." |
"
},
DISCARD_A => sub {
$a++;
$a_lines.=$old->[$_[0]];
},
DISCARD_B => sub {
$b++;
$b_lines.=$new->[$_[1]];
}}, $old, $new, );
print SDIFF "
\n";
close SDIFF;
last if $caught_sigint;
}