-module(commonmark@internal@parser@helpers). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([ol_marker/1, ul_marker/1, trim_indent/2, determine_indent/1, indent_pattern/1]). -spec ol_marker(binary()) -> commonmark@ast:ordered_list_marker(). ol_marker(Marker) -> case Marker of <<"."/utf8>> -> period_list_marker; <<")"/utf8>> -> bracket_list_marker; _ -> erlang:error(#{gleam_error => panic, message => (<<"Invalid ordered list marker: "/utf8, Marker/binary>>), module => <<"commonmark/internal/parser/helpers"/utf8>>, function => <<"ol_marker"/utf8>>, line => 12}) end. -spec ul_marker(binary()) -> commonmark@ast:unordered_list_marker(). ul_marker(Marker) -> case Marker of <<"*"/utf8>> -> asterisk_list_marker; <<"-"/utf8>> -> dash_list_marker; <<"+"/utf8>> -> plus_list_marker; _ -> erlang:error(#{gleam_error => panic, message => (<<"Invalid unordered list marker: "/utf8, Marker/binary>>), module => <<"commonmark/internal/parser/helpers"/utf8>>, function => <<"ul_marker"/utf8>>, line => 21}) end. -spec do_trim_indent(binary(), integer(), integer()) -> binary(). do_trim_indent(Line, N, Removed) -> Remaining = N - Removed, Next_tab_stop = 4 - (Removed rem 4), case Line of _ when Remaining =< 0 -> Line; <<"\t"/utf8, Rest/binary>> when Remaining < Next_tab_stop -> <<(gleam@string:repeat(<<" "/utf8>>, Next_tab_stop - Remaining))/binary, Rest/binary>>; <<" "/utf8, Rest@1/binary>> -> do_trim_indent(Rest@1, N, Removed + 1); <<"\t"/utf8, Rest@2/binary>> -> do_trim_indent(Rest@2, N, Removed + Next_tab_stop); _ -> Line end. -spec trim_indent(binary(), integer()) -> binary(). trim_indent(Line, N) -> do_trim_indent(Line, N, 0). -spec determine_indent(gleam@option:option(binary())) -> integer(). determine_indent(Indent) -> case Indent of none -> 0; {some, S} -> gleam@string:length(S) end. -spec indent_pattern(integer()) -> binary(). indent_pattern(Indent) -> case Indent of 0 -> <<""/utf8>>; I when I >= 4 -> <<"(?: {0,3}\t| )"/utf8, (indent_pattern(I - 4))/binary>>; I@1 -> <<<<"(?: {"/utf8, (gleam@int:to_string(I@1))/binary>>/binary, "}|\t)"/utf8>> end.