📄 diff.in
字号:
#!@perlbin@# $Id: diff,v 1.2 1998/04/30 11:58:15 argggh Exp $# diff -- Display diff output with markup.## Arne Georg Gleditsch <argggh@ifi.uio.no># Per Kristian Gjermshus <pergj@ifi.uio.no>### This program is free software; you can redistribute it and/or modify# it under the terms of the GNU General Public License as published by# the Free Software Foundation; either version 2 of the License, or# (at your option) any later version.## This program is distributed in the hope that it will be useful,# but WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the# GNU General Public License for more details.# # You should have received a copy of the GNU General Public License# along with this program; if not, write to the Free Software# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.######################################################################use lib 'lib/';use SimpleParse;use LXR::Common;use LXR::Config;use DB_File;sub htmlsub { my ($s, $l) = @_; my @s = split(/(<[^>]*>|&[\#\w\d]+;?)/, $s); $s = ''; while (@s) { my $f = substr(shift(@s), 0, $l); $l -= length($f); $s .= $f; $f = shift(@s); if ($f =~ /^&/) { if ($l > 0) { $s .= $f; $l--; } } else { $s .= $f; } } $s .= ' ' x $l; return $s;}sub printdiff { unless ($diffvar) { foreach ($Conf->allvariables) { push(@vars, $Conf->vardescription($_)); } $vars[$#vars-1] .= " or ".pop(@vars) if $#vars > 0; print("<p align=center>\n", "Please indicate the version of the file you wish to\n", "compare to by clicking on the appropriate\n", join(", ",@vars)," button.\n", "</p>\n"); return; } unless ($Path->{'file'}) { print("<h3 align=center>Diff not yet supported for directories.</h3>\n"); return; } $origvirt = $Path->{'virt'}.$Path->{'file'}; $origreal = $Path->{'real'}.$Path->{'file'}; $origval = $Conf->variable($diffvar); $Conf->variable($diffvar,$diffval); $diffvirt = $Conf->mappath($Path->{'virt'}).$Path->{'file'}; $diffreal = $Conf->sourceroot.$diffvirt; $Conf->variable($diffvar,$origval);# print("<h3>Diff of $origvirt -> $diffvirt</h3>\n");# print("<h3>($origreal -> $diffreal)</h3>\n"); # FIXME: Check existence of $origreal & $diffreal. &fflush; unless (open(DIFF, "-|")){ open(STDERR, ">&STDOUT"); exec('diff', '-U0', $origreal, $diffreal); print "*** Diff subprocess died unexpextedly: $!\n"; exit; } while (<DIFF>) { if (($os, $ol, $ns, $nl) = /@@ -(\d+)(?:,(\d+)|) \+(\d+)(?:,(\d+)|) @@/) { $os++ if $ol eq '0'; $ns++ if $nl eq '0'; $ol = 1 unless defined($ol); $nl = 1 unless defined($nl); $bo = $os + $ofs; if ($ol < $nl) { $ofs += $nl - $ol; $dir = '>>'; $ms = $nl - $ol; $ml = $ol; $orig{$os+$ol} = $ms; } else { $dir = '<<'; $ms = $ol - $nl; $ml = $nl; $new{$ns+$nl} = $ms; } foreach (0..$ml - 1) { $chg{$bo + $_} = '!!'; } foreach (0..$ms - 1) { $chg{$bo + $ml + $_} = $dir; } } } close(<DIFF>); print("<h1>Diff markup</h1>\n", "<h3>Differences between ", &fileref("$origvirt <i>(".$Conf->vardescription($diffvar). " $origval)</i>", $origvirt, undef, "$diffvar=$origval"), " and ", &fileref("$diffvirt <i>(".$Conf->vardescription($diffvar). " $diffval)</i>",$diffvirt, undef, "$diffvar=$diffval"), "</h3><hr>\n");# "<table width=\"100%\" border=0 cellpadding=0><tr><td>",## &fileref("<b>$origvirt <i>(".$Conf->vardescription($diffvar).# " $origval)</i></b>", $origvirt, undef, "$diffvar=$origval"),# "<hr></td>\n<td></td>\n<td>",## &fileref("<b>$diffvirt <i>(".$Conf->vardescription($diffvar).# " $diffval)</i></b>",$diffvirt, undef, "$diffvar=$diffval"),# "<hr></td>\n</tr></table>\n"); open(FOO, $origreal); $orig = ''; &markupfile(\*FOO, $Path->{'virt'}, $Path->{'file'}, sub { $orig .= shift }); $len = $.+$ofs; close(FOO); $Conf->variable($diffvar, $diffval); open(FOO, $diffreal); $new = ''; &markupfile(\*FOO, $Conf->mappath($Path->{'virt'}), $Path->{'file'}, sub { $new .= shift }); close(FOO); $Conf->variable($diffvar, $origval); $i = 1; $orig =~ s/^/"\n" x ($orig{$i++})/mge; $i = 1; $new =~ s/^/"\n" x ($new{$i++})/mge; @orig = split(/\n/, $orig); @new = split(/\n/, $new); print("<pre>"); foreach $i (0..$len) { $o = &htmlsub($orig[$i], 50);# $n = &htmlsub($new[$i], 999); $n = $new[$i];# print("<tr><td><code>$o</code></td>".# "<td><font color=red> ", $chg{$i+1}, " </font></td>".# "<td><code>$n</code></td></tr>\n"); print("$o <font color=red>", ($chg{$i+1} || " "), "</font> $n\n"); } print("</pre>");# print("</td></tr></table>");}($Conf, $HTTP, $Path) = &init;$diffvar = $HTTP->{'param'}->{'diffvar'};$diffval = $HTTP->{'param'}->{'diffval'};&makeheader('diff');&printdiff;&makefooter('diff');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -