Current section

Files

Jump to
glentities src glentities@internal@html_encoder@generic.erl
Raw

src/glentities@internal@html_encoder@generic.erl

-module(glentities@internal@html_encoder@generic).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([escape/1]).
-spec do_escape(
binary(),
integer(),
binary(),
list(binary()),
integer(),
boolean()
) -> list(binary()).
do_escape(String, Skip, Original, Acc, Len, Found_normal) ->
case {Found_normal, glentities_ffi:first(String)} of
{false, <<"<"/utf8>>} ->
Rest = glentities_ffi:drop_first(String),
Acc@1 = [<<"&lt;"/utf8>> | Acc],
do_escape(Rest, Skip + 1, Original, Acc@1, 0, false);
{false, <<">"/utf8>>} ->
Rest@1 = glentities_ffi:drop_first(String),
Acc@2 = [<<"&gt;"/utf8>> | Acc],
do_escape(Rest@1, Skip + 1, Original, Acc@2, 0, false);
{false, <<"&"/utf8>>} ->
Rest@2 = glentities_ffi:drop_first(String),
Acc@3 = [<<"&amp;"/utf8>> | Acc],
do_escape(Rest@2, Skip + 1, Original, Acc@3, 0, false);
{false, <<"\""/utf8>>} ->
Rest@3 = glentities_ffi:drop_first(String),
Acc@4 = [<<"&quot;"/utf8>> | Acc],
do_escape(Rest@3, Skip + 1, Original, Acc@4, 0, false);
{false, <<"'"/utf8>>} ->
Rest@4 = glentities_ffi:drop_first(String),
Acc@5 = [<<"&#39;"/utf8>> | Acc],
do_escape(Rest@4, Skip + 1, Original, Acc@5, 0, false);
{false, <<""/utf8>>} ->
Acc;
{false, _} ->
Rest@5 = glentities_ffi:drop_first(String),
do_escape(Rest@5, Skip, Original, Acc, 1, true);
{true, <<"<"/utf8>>} ->
Rest@6 = glentities_ffi:drop_first(String),
Slice = glentities_ffi:slice(Original, Skip, Len),
Acc@6 = [<<"&lt;"/utf8>>, Slice | Acc],
do_escape(Rest@6, (Skip + Len) + 1, Original, Acc@6, 0, false);
{true, <<">"/utf8>>} ->
Rest@7 = glentities_ffi:drop_first(String),
Slice@1 = glentities_ffi:slice(Original, Skip, Len),
Acc@7 = [<<"&gt;"/utf8>>, Slice@1 | Acc],
do_escape(Rest@7, (Skip + Len) + 1, Original, Acc@7, 0, false);
{true, <<"&"/utf8>>} ->
Rest@8 = glentities_ffi:drop_first(String),
Slice@2 = glentities_ffi:slice(Original, Skip, Len),
Acc@8 = [<<"&amp;"/utf8>>, Slice@2 | Acc],
do_escape(Rest@8, (Skip + Len) + 1, Original, Acc@8, 0, false);
{true, <<"\""/utf8>>} ->
Rest@9 = glentities_ffi:drop_first(String),
Slice@3 = glentities_ffi:slice(Original, Skip, Len),
Acc@9 = [<<"&quot;"/utf8>>, Slice@3 | Acc],
do_escape(Rest@9, (Skip + Len) + 1, Original, Acc@9, 0, false);
{true, <<"'"/utf8>>} ->
Rest@10 = glentities_ffi:drop_first(String),
Slice@4 = glentities_ffi:slice(Original, Skip, Len),
Acc@10 = [<<"&#39;"/utf8>>, Slice@4 | Acc],
do_escape(Rest@10, (Skip + Len) + 1, Original, Acc@10, 0, false);
{true, <<""/utf8>>} ->
case Skip of
0 ->
[Original];
_ ->
Slice@5 = glentities_ffi:slice(Original, Skip, Len),
[Slice@5 | Acc]
end;
{true, _} ->
Rest@11 = glentities_ffi:drop_first(String),
do_escape(Rest@11, Skip, Original, Acc, Len + 1, true)
end.
-spec escape(binary()) -> binary().
escape(Text) ->
_pipe = do_escape(Text, 0, Text, [], 0, false),
_pipe@1 = gleam@list:reverse(_pipe),
gleam@string:join(_pipe@1, <<""/utf8>>).