-module(l4u@l4u_util). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([split_multiline_string/1]). -spec read_multiline_string(binary(), binary()) -> {binary(), binary()}. read_multiline_string(Src, Acc) -> case Src of <<""/utf8>> -> {Acc, <<""/utf8>>}; <<"\"\"\""/utf8, Rest/binary>> -> {<>, Rest}; _ -> {Char, Rest@1} = begin _pipe = gleam@string:pop_grapheme(Src), gleam@result:unwrap(_pipe, {<<""/utf8>>, <<""/utf8>>}) end, read_multiline_string(Rest@1, <>) end. -spec read_until_multiline_string(binary(), binary()) -> {binary(), binary()}. read_until_multiline_string(Src, Acc) -> case Src of <<""/utf8>> -> {Acc, <<""/utf8>>}; <<"\"\"\""/utf8, _/binary>> -> {Acc, Src}; _ -> {Char, Rest} = begin _pipe = gleam@string:pop_grapheme(Src), gleam@result:unwrap(_pipe, {<<""/utf8>>, <<""/utf8>>}) end, read_until_multiline_string(Rest, <>) end. -spec split_multiline_rec(binary(), list(binary())) -> list(binary()). split_multiline_rec(Src, Acc) -> case Src of <<""/utf8>> -> gleam@list:reverse(Acc); <<"\"\"\""/utf8, R1/binary>> -> {Mlstr, Rest} = read_multiline_string(R1, <<"\"\"\""/utf8>>), split_multiline_rec(Rest, [Mlstr | Acc]); _ -> {Str, Rest@1} = read_until_multiline_string(Src, <<""/utf8>>), split_multiline_rec(Rest@1, [Str | Acc]) end. -spec split_multiline_string(binary()) -> list(binary()). split_multiline_string(Src) -> split_multiline_rec(Src, []).