4 |
use HTML::Entities; |
use HTML::Entities; |
5 |
use Data::Dump qw/dump/; |
use Data::Dump qw/dump/; |
6 |
|
|
|
|
|
7 |
=head1 Name |
=head1 Name |
8 |
|
|
9 |
SVNBrowser::ColorDiff |
SVNBrowser::ColorDiff |
45 |
|
|
46 |
my $out = "<tt>$cmd</tt><br/>"; |
my $out = "<tt>$cmd</tt><br/>"; |
47 |
|
|
48 |
$out .= "<pre>" . encode_entities($diff, '<>&"') . "</pre>"; |
my $mode = ''; |
49 |
|
my $mode_map = { |
50 |
|
'+' => 'add', |
51 |
|
'-' => 'rm', |
52 |
|
' ' => 'nop', |
53 |
|
}; |
54 |
|
|
55 |
|
foreach my $line (split(/\n/,$diff)) { |
56 |
|
|
57 |
|
next if ($line =~ /^(\+\+\+|---)\s/ || $line =~ /^=+$/); |
58 |
|
|
59 |
|
my $html = encode_entities($line, '<>&"'); |
60 |
|
if ($line =~ m/^([+\-\s])/) { |
61 |
|
my $m = $1; |
62 |
|
if ($mode ne $m) { |
63 |
|
$out .= qq{</pre>} if ($mode ne ''); |
64 |
|
$out .= qq{<pre class="diff-$mode_map->{$m}">}; |
65 |
|
} else { |
66 |
|
$out .= "\n"; |
67 |
|
} |
68 |
|
|
69 |
|
$mode = $m; |
70 |
|
$out .= qq{$html}; |
71 |
|
|
72 |
|
} else { |
73 |
|
$out .= qq{</pre>} if ($mode ne ''); |
74 |
|
$out .= qq{<div class="diff-note">$html</div>}; |
75 |
|
$mode = ''; |
76 |
|
} |
77 |
|
|
78 |
|
}; |
79 |
|
|
80 |
|
$out .= qq{</pre>} if ($mode ne ''); |
81 |
|
|
82 |
return $out; |
return $out; |
83 |
|
|