Skip to main content

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).