src/internal@converter.erl
-module(internal@converter).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/internal/converter.gleam").
-export([to_lustre/1]).
-export_type([tree/0]).
-type tree() :: {element, xmlm:tag(), list(tree())} | {data, binary()}.
-file("src/internal/converter.gleam", 82).
-spec attributes_to_lustre_string(list(xmlm:attribute()), boolean()) -> binary().
attributes_to_lustre_string(Attributes, Root) ->
Lustre_string = <<<<"["/utf8,
(gleam@string:join(
gleam@list:map(
Attributes,
fun(Attribute) ->
<<<<<<<<"attribute(\""/utf8,
(erlang:element(
3,
erlang:element(2, Attribute)
))/binary>>/binary,
"\", \""/utf8>>/binary,
(erlang:element(3, Attribute))/binary>>/binary,
"\")"/utf8>>
end
),
<<", "/utf8>>
))/binary>>/binary,
"]"/utf8>>,
case Root of
false ->
Lustre_string;
true ->
<<<<"add_defaults(attributes, "/utf8, Lustre_string/binary>>/binary,
")"/utf8>>
end.
-file("src/internal/converter.gleam", 44).
-spec maybe_add_children(tree()) -> binary().
maybe_add_children(Element) ->
{Tag@1, Children@1} = case Element of
{element, Tag, Children} -> {Tag, Children};
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"internal/converter"/utf8>>,
function => <<"maybe_add_children"/utf8>>,
line => 45,
value => _assert_fail,
start => 980,
'end' => 1025,
pattern_start => 991,
pattern_end => 1015})
end,
case erlang:element(3, erlang:element(2, Tag@1)) of
<<"a"/utf8>> ->
<<<<", ["/utf8,
(gleam@string:join(
gleam@list:map(
Children@1,
fun(_capture) ->
tree_to_lustre_string(_capture, false)
end
),
<<", "/utf8>>
))/binary>>/binary,
"]"/utf8>>;
<<"defs"/utf8>> ->
<<<<", ["/utf8,
(gleam@string:join(
gleam@list:map(
Children@1,
fun(_capture) ->
tree_to_lustre_string(_capture, false)
end
),
<<", "/utf8>>
))/binary>>/binary,
"]"/utf8>>;
<<"g"/utf8>> ->
<<<<", ["/utf8,
(gleam@string:join(
gleam@list:map(
Children@1,
fun(_capture) ->
tree_to_lustre_string(_capture, false)
end
),
<<", "/utf8>>
))/binary>>/binary,
"]"/utf8>>;
<<"marker"/utf8>> ->
<<<<", ["/utf8,
(gleam@string:join(
gleam@list:map(
Children@1,
fun(_capture) ->
tree_to_lustre_string(_capture, false)
end
),
<<", "/utf8>>
))/binary>>/binary,
"]"/utf8>>;
<<"mask"/utf8>> ->
<<<<", ["/utf8,
(gleam@string:join(
gleam@list:map(
Children@1,
fun(_capture) ->
tree_to_lustre_string(_capture, false)
end
),
<<", "/utf8>>
))/binary>>/binary,
"]"/utf8>>;
<<"missing_glyph"/utf8>> ->
<<<<", ["/utf8,
(gleam@string:join(
gleam@list:map(
Children@1,
fun(_capture) ->
tree_to_lustre_string(_capture, false)
end
),
<<", "/utf8>>
))/binary>>/binary,
"]"/utf8>>;
<<"pattern"/utf8>> ->
<<<<", ["/utf8,
(gleam@string:join(
gleam@list:map(
Children@1,
fun(_capture) ->
tree_to_lustre_string(_capture, false)
end
),
<<", "/utf8>>
))/binary>>/binary,
"]"/utf8>>;
<<"svg"/utf8>> ->
<<<<", ["/utf8,
(gleam@string:join(
gleam@list:map(
Children@1,
fun(_capture) ->
tree_to_lustre_string(_capture, false)
end
),
<<", "/utf8>>
))/binary>>/binary,
"]"/utf8>>;
<<"switch"/utf8>> ->
<<<<", ["/utf8,
(gleam@string:join(
gleam@list:map(
Children@1,
fun(_capture) ->
tree_to_lustre_string(_capture, false)
end
),
<<", "/utf8>>
))/binary>>/binary,
"]"/utf8>>;
<<"symbol"/utf8>> ->
<<<<", ["/utf8,
(gleam@string:join(
gleam@list:map(
Children@1,
fun(_capture) ->
tree_to_lustre_string(_capture, false)
end
),
<<", "/utf8>>
))/binary>>/binary,
"]"/utf8>>;
<<"view"/utf8>> ->
<<<<", ["/utf8,
(gleam@string:join(
gleam@list:map(
Children@1,
fun(_capture) ->
tree_to_lustre_string(_capture, false)
end
),
<<", "/utf8>>
))/binary>>/binary,
"]"/utf8>>;
<<"desc"/utf8>> ->
<<<<", ["/utf8,
(gleam@string:join(
gleam@list:map(
Children@1,
fun(_capture) ->
tree_to_lustre_string(_capture, false)
end
),
<<", "/utf8>>
))/binary>>/binary,
"]"/utf8>>;
<<"metadata"/utf8>> ->
<<<<", ["/utf8,
(gleam@string:join(
gleam@list:map(
Children@1,
fun(_capture) ->
tree_to_lustre_string(_capture, false)
end
),
<<", "/utf8>>
))/binary>>/binary,
"]"/utf8>>;
<<"title"/utf8>> ->
<<<<", ["/utf8,
(gleam@string:join(
gleam@list:map(
Children@1,
fun(_capture) ->
tree_to_lustre_string(_capture, false)
end
),
<<", "/utf8>>
))/binary>>/binary,
"]"/utf8>>;
<<"filter"/utf8>> ->
<<<<", ["/utf8,
(gleam@string:join(
gleam@list:map(
Children@1,
fun(_capture) ->
tree_to_lustre_string(_capture, false)
end
),
<<", "/utf8>>
))/binary>>/binary,
"]"/utf8>>;
<<"feDiffuseLighting"/utf8>> ->
<<<<", ["/utf8,
(gleam@string:join(
gleam@list:map(
Children@1,
fun(_capture) ->
tree_to_lustre_string(_capture, false)
end
),
<<", "/utf8>>
))/binary>>/binary,
"]"/utf8>>;
<<"feMerge"/utf8>> ->
<<<<", ["/utf8,
(gleam@string:join(
gleam@list:map(
Children@1,
fun(_capture) ->
tree_to_lustre_string(_capture, false)
end
),
<<", "/utf8>>
))/binary>>/binary,
"]"/utf8>>;
<<"feSpecularLighting"/utf8>> ->
<<<<", ["/utf8,
(gleam@string:join(
gleam@list:map(
Children@1,
fun(_capture) ->
tree_to_lustre_string(_capture, false)
end
),
<<", "/utf8>>
))/binary>>/binary,
"]"/utf8>>;
<<"feTile"/utf8>> ->
<<<<", ["/utf8,
(gleam@string:join(
gleam@list:map(
Children@1,
fun(_capture) ->
tree_to_lustre_string(_capture, false)
end
),
<<", "/utf8>>
))/binary>>/binary,
"]"/utf8>>;
<<"linearGradient"/utf8>> ->
<<<<", ["/utf8,
(gleam@string:join(
gleam@list:map(
Children@1,
fun(_capture) ->
tree_to_lustre_string(_capture, false)
end
),
<<", "/utf8>>
))/binary>>/binary,
"]"/utf8>>;
<<"radialGradient"/utf8>> ->
<<<<", ["/utf8,
(gleam@string:join(
gleam@list:map(
Children@1,
fun(_capture) ->
tree_to_lustre_string(_capture, false)
end
),
<<", "/utf8>>
))/binary>>/binary,
"]"/utf8>>;
<<"clipPath"/utf8>> ->
<<<<", ["/utf8,
(gleam@string:join(
gleam@list:map(
Children@1,
fun(_capture) ->
tree_to_lustre_string(_capture, false)
end
),
<<", "/utf8>>
))/binary>>/binary,
"]"/utf8>>;
<<"foreignObject"/utf8>> ->
<<<<", ["/utf8,
(gleam@string:join(
gleam@list:map(
Children@1,
fun(_capture) ->
tree_to_lustre_string(_capture, false)
end
),
<<", "/utf8>>
))/binary>>/binary,
"]"/utf8>>;
<<"textPath"/utf8>> ->
<<<<", ["/utf8,
(gleam@string:join(
gleam@list:map(
Children@1,
fun(_capture) ->
tree_to_lustre_string(_capture, false)
end
),
<<", "/utf8>>
))/binary>>/binary,
"]"/utf8>>;
<<"tspan"/utf8>> ->
<<<<", ["/utf8,
(gleam@string:join(
gleam@list:map(
Children@1,
fun(_capture) ->
tree_to_lustre_string(_capture, false)
end
),
<<", "/utf8>>
))/binary>>/binary,
"]"/utf8>>;
<<"text"/utf8>> ->
<<", "/utf8,
(gleam@string:join(
gleam@list:map(
Children@1,
fun(_capture@1) ->
tree_to_lustre_string(_capture@1, false)
end
),
<<""/utf8>>
))/binary>>;
<<"script"/utf8>> ->
<<", "/utf8,
(gleam@string:join(
gleam@list:map(
Children@1,
fun(_capture@1) ->
tree_to_lustre_string(_capture@1, false)
end
),
<<""/utf8>>
))/binary>>;
<<"style"/utf8>> ->
<<", "/utf8,
(gleam@string:join(
gleam@list:map(
Children@1,
fun(_capture@1) ->
tree_to_lustre_string(_capture@1, false)
end
),
<<""/utf8>>
))/binary>>;
_ ->
<<""/utf8>>
end.
-file("src/internal/converter.gleam", 31).
-spec tree_to_lustre_string(tree(), boolean()) -> binary().
tree_to_lustre_string(Tree, Root) ->
case Tree of
{element, Tag, _} = Element ->
<<<<<<<<<<"svg."/utf8,
(erlang:element(3, erlang:element(2, Tag)))/binary>>/binary,
"("/utf8>>/binary,
(attributes_to_lustre_string(
erlang:element(3, Tag),
Root
))/binary>>/binary,
(maybe_add_children(Element))/binary>>/binary,
")"/utf8>>;
{data, Data} ->
Data
end.
-file("src/internal/converter.gleam", 21).
-spec string_to_tree(xmlm:input()) -> {ok, tree()} | {error, xmlm:input_error()}.
string_to_tree(Input) ->
gleam@result:'try'(
xmlm:document_tree(
Input,
fun(Field@0, Field@1) -> {element, Field@0, Field@1} end,
fun(Field@0) -> {data, Field@0} end
),
fun(_use0) ->
{_, Tree, _} = _use0,
{ok, Tree}
end
).
-file("src/internal/converter.gleam", 11).
-spec to_lustre(binary()) -> {ok, binary()} | {error, binary()}.
to_lustre(Xml) ->
_pipe = Xml,
_pipe@1 = xmlm:from_string(_pipe),
_pipe@2 = xmlm:with_stripping(_pipe@1, true),
_pipe@3 = xmlm:with_encoding(_pipe@2, utf8),
_pipe@4 = string_to_tree(_pipe@3),
_pipe@5 = gleam@result:map(
_pipe@4,
fun(_capture) -> tree_to_lustre_string(_capture, true) end
),
gleam@result:map_error(_pipe@5, fun xmlm:input_error_to_string/1).