mirror of
https://github.com/processone/ejabberd.git
synced 2024-10-13 15:16:49 +02:00
Copy sh_to_ask function from xmerl_regexp.erl
This way we don't need to include xmerl application in our docker container
This commit is contained in:
parent
d2427c98c3
commit
3df78d3a8f
@ -85,11 +85,65 @@ greplace(String, Regexp, New) ->
|
||||
A -> A
|
||||
end.
|
||||
|
||||
-spec sh_to_awk(binary()) -> binary().
|
||||
|
||||
sh_to_awk(ShRegExp) ->
|
||||
case exec({xmerl_regexp, sh_to_awk, [binary_to_list(ShRegExp)]},
|
||||
{regexp, sh_to_awk, [binary_to_list(ShRegExp)]})
|
||||
of
|
||||
A -> iolist_to_binary(A)
|
||||
end.
|
||||
%% This code was copied and adapted from xmerl_regexp.erl
|
||||
|
||||
-spec sh_to_awk(binary()) -> binary().
|
||||
sh_to_awk(Sh) ->
|
||||
iolist_to_binary([<<"^(">>, sh_to_awk_1(Sh)]). %Fix the beginning
|
||||
|
||||
sh_to_awk_1(<<"*", Sh/binary>>) -> %This matches any string
|
||||
[<<".*">>, sh_to_awk_1(Sh)];
|
||||
sh_to_awk_1(<<"?", Sh/binary>>) -> %This matches any character
|
||||
[$., sh_to_awk_1(Sh)];
|
||||
sh_to_awk_1(<<"[^]", Sh/binary>>) -> %This takes careful handling
|
||||
[<<"\\^">>, sh_to_awk_1(Sh)];
|
||||
%% Must move '^' to end.
|
||||
sh_to_awk_1(<<"[^", Sh/binary>>) ->
|
||||
[$[, sh_to_awk_2(Sh, true)];
|
||||
sh_to_awk_1(<<"[!", Sh/binary>>) ->
|
||||
[<<"[^">>, sh_to_awk_2(Sh, false)];
|
||||
sh_to_awk_1(<<"[", Sh/binary>>) ->
|
||||
[$[, sh_to_awk_2(Sh, false)];
|
||||
sh_to_awk_1(<<C:8, Sh/binary>>) -> %% Unspecialise everything else which is not an escape character.
|
||||
case sh_special_char(C) of
|
||||
true -> [$\\,C|sh_to_awk_1(Sh)];
|
||||
false -> [C|sh_to_awk_1(Sh)]
|
||||
end;
|
||||
sh_to_awk_1(<<>>) ->
|
||||
<<")$">>. %Fix the end
|
||||
|
||||
sh_to_awk_2(<<"]", Sh/binary>>, UpArrow) ->
|
||||
[$]|sh_to_awk_3(Sh, UpArrow)];
|
||||
sh_to_awk_2(Sh, UpArrow) ->
|
||||
sh_to_awk_3(Sh, UpArrow).
|
||||
|
||||
sh_to_awk_3(<<"]", Sh/binary>>, true) ->
|
||||
[<<"^]">>, sh_to_awk_1(Sh)];
|
||||
sh_to_awk_3(<<"]", Sh/binary>>, false) ->
|
||||
[$]|sh_to_awk_1(Sh)];
|
||||
sh_to_awk_3(<<C:8, Sh/binary>>, UpArrow) ->
|
||||
[C|sh_to_awk_3(Sh, UpArrow)];
|
||||
sh_to_awk_3(<<>>, true) ->
|
||||
[$^|sh_to_awk_1([])];
|
||||
sh_to_awk_3(<<>>, false) ->
|
||||
sh_to_awk_1([]).
|
||||
|
||||
%% -type sh_special_char(char()) -> bool().
|
||||
%% Test if a character is a special character.
|
||||
|
||||
sh_special_char($|) -> true;
|
||||
sh_special_char($*) -> true;
|
||||
sh_special_char($+) -> true;
|
||||
sh_special_char($?) -> true;
|
||||
sh_special_char($() -> true;
|
||||
sh_special_char($)) -> true;
|
||||
sh_special_char($\\) -> true;
|
||||
sh_special_char($^) -> true;
|
||||
sh_special_char($$) -> true;
|
||||
sh_special_char($.) -> true;
|
||||
sh_special_char($[) -> true;
|
||||
sh_special_char($]) -> true;
|
||||
sh_special_char($") -> true;
|
||||
sh_special_char(_C) -> false.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user