Packages
kafka_protocol
0.7.0
4.3.4
4.3.3
4.3.2
4.3.1
4.3.0
4.2.9
4.2.8
4.2.7
4.2.6
4.2.5
4.2.4
4.2.3
4.2.2
4.2.1
4.2.0
4.1.10
4.1.9
4.1.8
4.1.7
4.1.6
4.1.5
4.1.4
4.1.3
4.1.2
4.1.1
4.1.0
4.0.3
4.0.2
4.0.1
3.0.1
3.0.0
2.4.1
2.3.6
2.3.5
2.3.4
2.3.3
2.3.2
2.3.1
2.3.0
2.2.9
2.2.8
2.2.7
2.2.6
2.2.5
2.2.4
2.2.3
2.2.2
2.2.1
2.2.0
2.1.2
2.1.1
2.1.0
2.0.1
2.0.0
1.1.3
1.1.2
1.1.1
1.1.0
1.0.0
0.9.2
0.9.1
0.9.0
0.8.0
0.7.8
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.0
0.4.0
0.3.2
0.3.1
0.2.3
Kafka protocol library for Erlang/Elixir
Current section
Files
Jump to
Current section
Files
priv/kpro_scanner.xrl
Definitions.
Rules.
[A-Z][0-9a-zA-Z]* : {token, {name, TokenLine, list_to_atom(TokenChars)}}.
[a-z][0-9a-zA-Z]* : {token, {prim, TokenLine, list_to_atom(TokenChars)}}.
=> : {token, {'=>', TokenLine}}.
\[ : {token, {'[', TokenLine}}.
\] : {token, {']', TokenLine}}.
\| : {token, {'|', TokenLine}}.
\s : skip_token.
\n : skip_token.
Erlang code.
-export([file/1]).
file(Filename) ->
{ok, Fd} = file:open(Filename, [read]),
try
read_lines(Fd, [], [])
after
file:close(Fd)
end.
read_lines(Fd, Def, Defs) ->
case file:read_line(Fd) of
eof ->
lists:reverse([lists:reverse(Def) | Defs]);
{ok, [$# | _]} ->
%% ignore comment line
read_lines(Fd, Def, Defs);
{ok, Line} ->
{ok, Tokens, _LineNum} = string(Line),
case is_new_def(Def, Line) of
true ->
NewDef = lists:reverse(Def),
read_lines(Fd, [Tokens], [NewDef | Defs]);
false ->
NewDef = add_tokens(Tokens, Def),
read_lines(Fd, NewDef, Defs)
end
end.
is_new_def([_|_], [C | _]) -> C >= $A andalso C =< $Z;
is_new_def(_, _) -> false.
add_tokens([], Def) -> Def;
add_tokens([_|_] = Tokens, Def) -> [Tokens | Def].