Current section
Files
Jump to
Current section
Files
src/kdleam@comment.erl
-module(kdleam@comment).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/kdleam/comment.gleam").
-export([skip_single_line_comment/1, skip_block_comment/1, skip_ws/1, skip_line_space/1, skip_node_space/1]).
-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/kdleam/comment.gleam", 7).
?DOC(false).
-spec skip_single_line_comment(kdleam@scanner:scanner()) -> {ok,
kdleam@scanner:scanner()} |
{error, kdleam@error:kdl_error()}.
skip_single_line_comment(S) ->
case kdleam@scanner:peek(S) of
{some, Ch} ->
case kdleam@scanner:is_newline(Ch) of
true ->
{ok, S};
false ->
{_, Next} = kdleam@scanner:advance(S),
skip_single_line_comment(Next)
end;
none ->
{ok, S}
end.
-file("src/kdleam/comment.gleam", 26).
?DOC(false).
-spec skip_block_comment_depth(kdleam@scanner:scanner(), integer()) -> {ok,
kdleam@scanner:scanner()} |
{error, kdleam@error:kdl_error()}.
skip_block_comment_depth(S, Depth) ->
case Depth =< 0 of
true ->
{ok, S};
false ->
case kdleam@scanner:peek(S) of
none ->
{error,
kdleam@scanner:make_error(S, unclosed_block_comment)};
{some, <<"/"/utf8>>} ->
case kdleam@scanner:peek_next(S) of
{some, <<"*"/utf8>>} ->
{_, S1} = kdleam@scanner:advance(S),
{_, S2} = kdleam@scanner:advance(S1),
skip_block_comment_depth(S2, Depth + 1);
_ ->
{_, Next} = kdleam@scanner:advance(S),
skip_block_comment_depth(Next, Depth)
end;
{some, <<"*"/utf8>>} ->
case kdleam@scanner:peek_next(S) of
{some, <<"/"/utf8>>} ->
{_, S1@1} = kdleam@scanner:advance(S),
{_, S2@1} = kdleam@scanner:advance(S1@1),
skip_block_comment_depth(S2@1, Depth - 1);
_ ->
{_, Next@1} = kdleam@scanner:advance(S),
skip_block_comment_depth(Next@1, Depth)
end;
{some, _} ->
{_, Next@2} = kdleam@scanner:advance(S),
skip_block_comment_depth(Next@2, Depth)
end
end.
-file("src/kdleam/comment.gleam", 22).
?DOC(false).
-spec skip_block_comment(kdleam@scanner:scanner()) -> {ok,
kdleam@scanner:scanner()} |
{error, kdleam@error:kdl_error()}.
skip_block_comment(S) ->
skip_block_comment_depth(S, 1).
-file("src/kdleam/comment.gleam", 68).
?DOC(false).
-spec skip_ws(kdleam@scanner:scanner()) -> {ok, kdleam@scanner:scanner()} |
{error, kdleam@error:kdl_error()}.
skip_ws(S) ->
case kdleam@scanner:peek(S) of
{some, Ch} ->
case kdleam@scanner:is_unicode_space(Ch) of
true ->
{_, Next} = kdleam@scanner:advance(S),
skip_ws(Next);
false ->
case (Ch =:= <<"*"/utf8>>) andalso (kdleam@scanner:peek_next(
S
)
=:= {some, <<"/"/utf8>>}) of
true ->
{error,
kdleam@scanner:make_error(
S,
unmatched_block_comment_end
)};
false ->
case (Ch =:= <<"/"/utf8>>) andalso (kdleam@scanner:peek_next(
S
)
=:= {some, <<"*"/utf8>>}) of
true ->
{_, S1} = kdleam@scanner:advance(S),
{_, S2} = kdleam@scanner:advance(S1),
gleam@result:'try'(
skip_block_comment(S2),
fun(S3) -> skip_ws(S3) end
);
false ->
{ok, S}
end
end
end;
_ ->
{ok, S}
end.
-file("src/kdleam/comment.gleam", 177).
?DOC(false).
-spec try_skip_escline(kdleam@scanner:scanner()) -> {ok,
{boolean(), kdleam@scanner:scanner()}} |
{error, kdleam@error:kdl_error()}.
try_skip_escline(S) ->
case kdleam@scanner:peek(S) of
{some, <<"\\"/utf8>>} ->
{_, S1} = kdleam@scanner:advance(S),
gleam@result:'try'(
skip_ws(S1),
fun(S2) -> case kdleam@scanner:peek(S2) of
{some, <<"/"/utf8>>} ->
case kdleam@scanner:peek_next(S2) of
{some, <<"/"/utf8>>} ->
{_, S3} = kdleam@scanner:advance(S2),
{_, S4} = kdleam@scanner:advance(S3),
gleam@result:'try'(
skip_single_line_comment(S4),
fun(S5) ->
{_, S6} = kdleam@scanner:consume_newline(
S5
),
{ok, {true, S6}}
end
);
_ ->
{ok, {false, S}}
end;
{some, Ch} ->
case kdleam@scanner:is_newline(Ch) of
true ->
{_, S3@1} = kdleam@scanner:consume_newline(
S2
),
{ok, {true, S3@1}};
false ->
{ok, {false, S}}
end;
none ->
{ok, {true, S2}}
end end
);
_ ->
{ok, {false, S}}
end.
-file("src/kdleam/comment.gleam", 114).
?DOC(false).
-spec skip_line_space_checked(kdleam@scanner:scanner(), binary()) -> {ok,
kdleam@scanner:scanner()} |
{error, kdleam@error:kdl_error()}.
skip_line_space_checked(S, Ch) ->
case kdleam@scanner:is_newline(Ch) of
true ->
{_, Next} = kdleam@scanner:consume_newline(S),
skip_line_space(Next);
false ->
case (Ch =:= <<"/"/utf8>>) andalso (kdleam@scanner:peek_next(S) =:= {some,
<<"/"/utf8>>}) of
true ->
{_, S1} = kdleam@scanner:advance(S),
{_, S2} = kdleam@scanner:advance(S1),
gleam@result:'try'(
skip_single_line_comment(S2),
fun(S3) ->
{_, S4} = kdleam@scanner:consume_newline(S3),
skip_line_space(S4)
end
);
false ->
case (Ch =:= <<"/"/utf8>>) andalso (kdleam@scanner:peek_next(
S
)
=:= {some, <<"*"/utf8>>}) of
true ->
{_, S1@1} = kdleam@scanner:advance(S),
{_, S2@1} = kdleam@scanner:advance(S1@1),
gleam@result:'try'(
skip_block_comment(S2@1),
fun(S3@1) -> skip_line_space(S3@1) end
);
false ->
case Ch =:= <<"\\"/utf8>> of
true ->
gleam@result:'try'(
try_skip_escline(S),
fun(Esc) -> case Esc of
{true, Next@1} ->
skip_line_space(Next@1);
{false, _} ->
{ok, S}
end end
);
false ->
{ok, S}
end
end
end
end.
-file("src/kdleam/comment.gleam", 96).
?DOC(false).
-spec skip_line_space(kdleam@scanner:scanner()) -> {ok,
kdleam@scanner:scanner()} |
{error, kdleam@error:kdl_error()}.
skip_line_space(S) ->
case kdleam@scanner:peek(S) of
{some, Ch} ->
case kdleam@scanner:is_unicode_space(Ch) of
true ->
{_, Next} = kdleam@scanner:advance(S),
skip_line_space(Next);
false ->
case (Ch =:= <<"*"/utf8>>) andalso (kdleam@scanner:peek_next(
S
)
=:= {some, <<"/"/utf8>>}) of
true ->
{error,
kdleam@scanner:make_error(
S,
unmatched_block_comment_end
)};
false ->
skip_line_space_checked(S, Ch)
end
end;
_ ->
{ok, S}
end.
-file("src/kdleam/comment.gleam", 166).
?DOC(false).
-spec skip_esclines(kdleam@scanner:scanner(), boolean()) -> {ok,
{boolean(), kdleam@scanner:scanner()}} |
{error, kdleam@error:kdl_error()}.
skip_esclines(S, Had) ->
gleam@result:'try'(try_skip_escline(S), fun(Result) -> case Result of
{true, Next} ->
gleam@result:'try'(
skip_ws(Next),
fun(After_ws) -> skip_esclines(After_ws, true) end
);
{false, _} ->
{ok, {Had, S}}
end end).
-file("src/kdleam/comment.gleam", 157).
?DOC(false).
-spec skip_node_space(kdleam@scanner:scanner()) -> {ok,
{boolean(), kdleam@scanner:scanner()}} |
{error, kdleam@error:kdl_error()}.
skip_node_space(S) ->
Start = erlang:element(4, S),
gleam@result:'try'(
skip_ws(S),
fun(After_ws) ->
Had_ws = erlang:element(4, After_ws) /= Start,
gleam@result:'try'(
skip_esclines(After_ws, false),
fun(Result) ->
{Had_escline, Final} = Result,
{ok, {Had_ws orelse Had_escline, Final}}
end
)
end
).