-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), <<<>/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).