-module(gg_cn@internal@sort_modifiers).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/gg_cn/internal/sort_modifiers.gleam").
-export([sort_modifiers/2]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(false).
-file("src/gg_cn/internal/sort_modifiers.gleam", 34).
?DOC(false).
-spec flush(list(binary()), list(binary())) -> list(binary()).
flush(Segment, Result_rev) ->
_pipe = Segment,
_pipe@1 = gleam@list:sort(_pipe, fun gleam@string:compare/2),
gleam@list:fold(_pipe@1, Result_rev, fun(Acc, Item) -> [Item | Acc] end).
-file("src/gg_cn/internal/sort_modifiers.gleam", 14).
?DOC(false).
-spec sort_modifiers(gleam@set:set(binary()), list(binary())) -> list(binary()).
sort_modifiers(Order_sensitive, Modifiers) ->
{Result_rev@1, Segment@1} = gleam@list:fold(
Modifiers,
{[], []},
fun(Acc, Modifier) ->
{Result_rev, Segment} = Acc,
Is_arbitrary = gleam_stdlib:string_starts_with(
Modifier,
<<"["/utf8>>
),
Is_order_sensitive = gleam@set:contains(Order_sensitive, Modifier),
case Is_arbitrary orelse Is_order_sensitive of
true ->
{[Modifier | flush(Segment, Result_rev)], []};
false ->
{Result_rev, [Modifier | Segment]}
end
end
),
lists:reverse(flush(Segment@1, Result_rev@1)).