X-Git-Url: https://git.ladys.computer/Gitweb/blobdiff_plain/5d944b9d5c813f44ee25ce55ec7dc37caa62bab6caea5827f5296de1cc8902eb..ceaa039c07bb2aa46dc3fbfd0c43d587d30ee96e0a1f69a2ee69dbfbab4702e5:/gitweb.perl diff --git a/gitweb.perl b/gitweb.perl index 4591ed7..39a1958 100755 --- a/gitweb.perl +++ b/gitweb.perl @@ -585,11 +585,39 @@ sub esc_html ($;%) { 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 "$chr"; +} + +# Alternatively use unicode control pictures codepoints. +sub quot_upr { + my $cntrl = shift; + my $chr = sprintf('&#%04d;', 0x2400+ord($cntrl)); + return "$chr"; +} + # quote control characters and escape filename to HTML sub esc_path { my $str = shift; + $str = esc_html($str); - $str =~ s|([[:cntrl:]])|?|g; + $str =~ s|([[:cntrl:]])|quot_cec($1)|eg; return $str; }