mirror of
https://github.com/processone/ejabberd.git
synced 2024-12-20 17:27:00 +01: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
|
A -> A
|
||||||
end.
|
end.
|
||||||
|
|
||||||
-spec sh_to_awk(binary()) -> binary().
|
|
||||||
|
|
||||||
sh_to_awk(ShRegExp) ->
|
%% This code was copied and adapted from xmerl_regexp.erl
|
||||||
case exec({xmerl_regexp, sh_to_awk, [binary_to_list(ShRegExp)]},
|
|
||||||
{regexp, sh_to_awk, [binary_to_list(ShRegExp)]})
|
-spec sh_to_awk(binary()) -> binary().
|
||||||
of
|
sh_to_awk(Sh) ->
|
||||||
A -> iolist_to_binary(A)
|
iolist_to_binary([<<"^(">>, sh_to_awk_1(Sh)]). %Fix the beginning
|
||||||
end.
|
|
||||||
|
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