123456789101112131415161718192021222324252627 |
- -module(sh_path).
- -export([escape/1, unescape/1]).
- escape(Path) -> R = reserved(), lists:append([char_encode(Char, R) || Char <- Path]).
- unescape(Str) -> decode(Str).
- reserved() -> sets:from_list([$/, $\\, $:, $%]).
- char_encode(Char, Reserved) ->
- case sets:is_element(Char, Reserved) of
- true -> [$% | http_util:integer_to_hexlist(Char)];
- false -> [Char] end.
- %% from http_uri:decode/1
- decode(String) ->
- do_decode(String).
- do_decode([$%,Hex1,Hex2|Rest]) ->
- [hex2dec(Hex1)*16+hex2dec(Hex2)|do_decode(Rest)];
- do_decode([First|Rest]) ->
- [First|do_decode(Rest)];
- do_decode([]) ->
- [].
- hex2dec(X) when (X>=$0) andalso (X=<$9) -> X-$0;
- hex2dec(X) when (X>=$A) andalso (X=<$F) -> X-$A+10;
- hex2dec(X) when (X>=$a) andalso (X=<$f) -> X-$a+10.
|