Packages

A markup language to define ER schemas

Current section

Files

Jump to
prequel src prequel@internals@extra@string.erl
Raw

src/prequel@internals@extra@string.erl

-module(prequel@internals@extra@string).
-compile([no_auto_import, nowarn_unused_vars]).
-export([chunks_of/2, split_at/2, highlight_from_to/4, highlight_from/3, highlight_up_to/3]).
-spec chunks_of(binary(), integer()) -> list(binary()).
chunks_of(String, Max_size) ->
_pipe = gleam@string:split(String, <<" "/utf8>>),
_pipe@1 = gleam@list:fold(
_pipe,
{0, [[]]},
fun(Acc, Word) ->
{Current_chunk_size, [Current_chunk | Rest] = Chunks} = case Acc of
{_, [_ | _]} -> Acc;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Assertion pattern match failed"/utf8>>,
value => _assert_fail,
module => <<"prequel/internals/extra/string"/utf8>>,
function => <<"chunks_of"/utf8>>,
line => 32})
end,
Word_size = gleam@string:length(Word),
case ((Word_size + Current_chunk_size) + 1) > Max_size of
true ->
{Word_size, [[Word] | Chunks]};
false ->
{Current_chunk_size + Word_size,
[[Word | Current_chunk] | Rest]}
end
end
),
_pipe@2 = gleam@pair:second(_pipe@1),
_pipe@3 = gleam@list:map(_pipe@2, fun gleam@list:reverse/1),
_pipe@4 = gleam@list:map(
_pipe@3,
fun(_capture) -> gleam@string:join(_capture, <<" "/utf8>>) end
),
_pipe@5 = gleam@list:reverse(_pipe@4),
gleam@list:filter(
_pipe@5,
fun(String@1) -> not gleam@string:is_empty(String@1) end
).
-spec split_at(binary(), integer()) -> {binary(), binary()}.
split_at(String, Index) ->
Length = gleam@string:length(String),
First = gleam@string:slice(String, 0, Index + 1),
Second = gleam@string:slice(String, Index + 1, Length),
{First, Second}.
-spec highlight_from_to(
binary(),
integer(),
integer(),
fun((binary()) -> binary())
) -> binary().
highlight_from_to(String, From, To, Colour) ->
{First, Rest} = split_at(String, From - 2),
{Second, Third} = split_at(Rest, To - From),
<<<<First/binary, (Colour(Second))/binary>>/binary, Third/binary>>.
-spec highlight_from(binary(), integer(), fun((binary()) -> binary())) -> binary().
highlight_from(String, From, Colour) ->
highlight_from_to(String, From, gleam@string:length(String), Colour).
-spec highlight_up_to(binary(), integer(), fun((binary()) -> binary())) -> binary().
highlight_up_to(String, Up_to, Colour) ->
highlight_from_to(String, 1, Up_to, Colour).