Subject: Re: [PATCH 2/n] gitweb: Use '&iquot;' instead of '?' in esc_path

From: Jakub Narebski <[email-masked]>
Date: Mon, 6 Nov 2006 22:58:08 +0100

Jakub Narebski wrote:
> 3. Use Character Escape Codes (CEC), using alphabetic and octal
>    backslash sequences like those used in C. Probably need to escape
>    backslash (quoting character) too. Has the advantage of being widely
>    understood in POSIX world. Has the disadvantage of need for escape
>    sequence table/hash. Has the advantage that it works for all
>    characters - simple octal backslash sequence if they have no special
>    escape sequence.

Here is example code for this:

	sub esc_path {
		my $str = shift;

		sub quot {
			my $seq = shift;
			my %es = (
				"\t" => '\t', # tab            (HT, TAB)
				"\n" => '\n', # newline        (NL)
				"\r" => '\r', # 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)
			);

			if (exists $es{seq}) {
				return $es{$seq};
			}
			return sprintf("\\%03o", ord($seq));
		}
		
		$str = esc_html($str);
		$str =~ s/([[:cntrl:]])/'<span class="cntrl">' . quot($1) . '</span>'/eg;
		return $str;
	}

-- 
Jakub Narebski