gitweb: Refactor untabifying - converting tabs to spaces

Add untabify subroutine and use it.  It also fixes git_diff_print
which used to get the tabstop wrong.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Jakub Narebski 2006-08-06 02:08:31 +02:00 committed by Junio C Hamano
parent 10161355ba
commit f16db173a4

View File

@ -221,6 +221,20 @@ sub unquote {
return $str; return $str;
} }
# escape tabs (convert tabs to spaces)
sub untabify {
my $line = shift;
while ((my $pos = index($line, "\t")) != -1) {
if (my $count = (8 - ($pos % 8))) {
my $spaces = ' ' x $count;
$line =~ s/\t/$spaces/;
}
}
return $line;
}
## ---------------------------------------------------------------------- ## ----------------------------------------------------------------------
## HTML aware string manipulation ## HTML aware string manipulation
@ -1237,12 +1251,7 @@ sub git_diff_print {
# skip errors # skip errors
next; next;
} }
while ((my $pos = index($line, "\t")) != -1) { $line = untabify($line);
if (my $count = (8 - (($pos-1) % 8))) {
my $spaces = ' ' x $count;
$line =~ s/\t/$spaces/;
}
}
print "<div class=\"diff$diff_class\">" . esc_html($line) . "</div>\n"; print "<div class=\"diff$diff_class\">" . esc_html($line) . "</div>\n";
} }
} }
@ -1582,13 +1591,8 @@ HTML
$age_class = age_class($age); $age_class = age_class($age);
$author = esc_html ($author); $author = esc_html ($author);
$author =~ s/ /&nbsp;/g; $author =~ s/ /&nbsp;/g;
# escape tabs
while ((my $pos = index($data, "\t")) != -1) { $data = untabify($data);
if (my $count = (8 - ($pos % 8))) {
my $spaces = ' ' x $count;
$data =~ s/\t/$spaces/;
}
}
$data = esc_html ($data); $data = esc_html ($data);
print <<HTML; print <<HTML;
@ -1711,12 +1715,7 @@ sub git_blob {
while (my $line = <$fd>) { while (my $line = <$fd>) {
chomp $line; chomp $line;
$nr++; $nr++;
while ((my $pos = index($line, "\t")) != -1) { $line = untabify($line);
if (my $count = (8 - ($pos % 8))) {
my $spaces = ' ' x $count;
$line =~ s/\t/$spaces/;
}
}
printf "<div class=\"pre\"><a id=\"l%i\" href=\"#l%i\" class=\"linenr\">%4i</a> %s</div>\n", $nr, $nr, $nr, esc_html($line); printf "<div class=\"pre\"><a id=\"l%i\" href=\"#l%i\" class=\"linenr\">%4i</a> %s</div>\n", $nr, $nr, $nr, esc_html($line);
} }
close $fd or print "Reading blob failed.\n"; close $fd or print "Reading blob failed.\n";