- From: Ville Skytta via cvs-syncmail <cvsmail@w3.org>
- Date: Sun, 04 Oct 2009 20:42:03 +0000
- To: www-validator-cvs@w3.org
Update of /sources/public/validator/httpd/cgi-bin
In directory hutz:/tmp/cvs-serv24031
Modified Files:
check
Log Message:
Don't truncate source lines that fit within our limits; when truncating,
replace only one char with ellipsis instead of three; simplify truncation
code in general.
Index: check
===================================================================
RCS file: /sources/public/validator/httpd/cgi-bin/check,v
retrieving revision 1.706
retrieving revision 1.707
diff -u -d -r1.706 -r1.707
--- check 4 Oct 2009 20:38:25 -0000 1.706
+++ check 4 Oct 2009 20:42:01 -0000 1.707
@@ -1896,48 +1896,37 @@
#
# Truncate source lines for report.
-#
+# Expects 1-based column indexes.
sub truncate_line {
- my $line = shift;
- my $col = shift;
+ my $line = shift;
+ my $col = shift;
+ my $maxlen = 80; # max line length to truncate to
- my $start = $col;
- my $end = $col;
+ my $diff = length($line) - $maxlen;
- for (1..40) {
- $start-- if ($start - 1 >= 0); # in/de-crement until...
- $end++ if ($end + 1 <= length $line); # ...we hit end of line.
- }
+ # Don't truncate at all if it fits.
+ return ($line, $col) if ($diff <= 0);
- unless ($end - $start == 80) {
- if ($start == 0) { # Hit start of line, maybe grab more at end.
- my $diff = 40 - $col;
- for (1..$diff) {
- $end++ if ($end + 1 <= length $line);
- }
- } elsif ($end == length $line) { # Hit end of line, maybe grab more at beginning.
- my $diff = 80 - $col;
- for (1..$diff) {
- $start-- if ($start - 1 >= 0);
- }
- }
+ my $start = $col - int($maxlen/2);
+ if ($start < 0) {
+ # Truncate only from end of line.
+ $start = 0;
+ $line = substr($line, $start, $maxlen - 1) . '…';
+ }
+ elsif ($start > $diff) {
+ # Truncate only from beginning of line.
+ $start = $diff;
+ $line = '…' . substr($line, $start + 1);
+ }
+ else {
+ # Truncate from both beginning and end of line.
+ $line = '…' . substr($line, $start + 1, $maxlen - 2) . '…';
}
- #
- # Add ellipsis at end if necessary.
- unless ($end == length $line) {substr $line, -3, 3, '…'};
-
- $col = $col - $start; # New offset is diff from $col to $start.
- $line = substr $line, $start, $end - $start; # Truncate.
-
- #
- # Add ellipsis at start if necessary.
- unless ($start == 0) {
- substr $line, 0, 3, '…';
- $col = $col - 2;
- };
+ # Shift column if we truncated from beginning of line.
+ $col -= $start;
- return $line, $col;
+ return ($line, $col);
}
#
Received on Sunday, 4 October 2009 20:42:07 UTC