]> Lady’s Gitweb - Gitweb/blobdiff - gitweb.perl
gitweb: Use character or octal escape codes (and add span.cntrl) in esc_path
[Gitweb] / gitweb.perl
index 4591ed7150de2f0e27c4a950d79ab5cce06414a39b1eefc42c334777ad1ff156..39a19585d1974765364364e86ede74f33be54349de3b709b3ad3981cb851270f 100755 (executable)
@@ -585,11 +585,39 @@ sub esc_html ($;%) {
        return $str;
 }
 
        return $str;
 }
 
+# Make control characterss "printable".
+sub quot_cec {
+       my $cntrl = shift;
+       my %es = ( # character escape codes, aka escape sequences
+                  "\t" => '\t',   # tab            (HT)
+                  "\n" => '\n',   # line feed      (LF)
+                  "\r" => '\r',   # carrige return (CR)
+                  "\f" => '\f',   # form feed      (FF)
+                  "\b" => '\b',   # backspace      (BS)
+                  "\a" => '\a',   # alarm (bell)   (BEL)
+                  "\e" => '\e',   # escape         (ESC)
+                  "\013" => '\v', # vertical tab   (VT)
+                  "\000" => '\0', # nul character  (NUL)
+                  );
+       my $chr = ( (exists $es{$cntrl})
+                   ? $es{$cntrl}
+                   : sprintf('\%03o', ord($cntrl)) );
+       return "<span class=\"cntrl\">$chr</span>";
+}
+
+# Alternatively use unicode control pictures codepoints.
+sub quot_upr {
+       my $cntrl = shift;
+       my $chr = sprintf('&#%04d;', 0x2400+ord($cntrl));
+       return "<span class=\"cntrl\">$chr</span>";
+}
+
 # quote control characters and escape filename to HTML
 sub esc_path {
        my $str = shift;
 # quote control characters and escape filename to HTML
 sub esc_path {
        my $str = shift;
+
        $str = esc_html($str);
        $str = esc_html($str);
-       $str =~ s|([[:cntrl:]])|<span class="cntrl">?</span>|g;
+       $str =~ s|([[:cntrl:]])|quot_cec($1)|eg;
        return $str;
 }
 
        return $str;
 }
 
This page took 0.252205 seconds and 4 git commands to generate.