-module(xmljson@internal@xml). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([dict_from_list/1, parse_attributes/1, merge_namespaces/2, namespace_lookup_dict/1, namespace_prefix/2, parse_xml/4]). -file("/home/edwin/Documents/code/gleam/badgerfish/src/xmljson/internal/xml.gleam", 10). -spec dict_from_list(list({KID, simplejson@jsonvalue:json_value()})) -> gleam@dict:dict(KID, simplejson@jsonvalue:json_value()). dict_from_list(Xs) -> _pipe = Xs, gleam@list:fold( _pipe, maps:new(), fun(Acc, A) -> {K, V} = A, case gleam_stdlib:map_get(Acc, K) of {ok, {json_array, X}} -> Xs@1 = [V | X], gleam@dict:insert(Acc, K, {json_array, Xs@1}); {ok, X@1} -> Xs@2 = [V, X@1], gleam@dict:insert(Acc, K, {json_array, Xs@2}); {error, _} -> gleam@dict:insert(Acc, K, V) end end ). -file("/home/edwin/Documents/code/gleam/badgerfish/src/xmljson/internal/xml.gleam", 30). -spec parse_attributes(list(xmlm:attribute())) -> {list({binary(), simplejson@jsonvalue:json_value()}), list({binary(), simplejson@jsonvalue:json_value()})}. parse_attributes(Attr) -> Upsert_fn = fun(X, Key, Value) -> case X of {some, {json_object, Dct}} -> {json_object, gleam@dict:insert(Dct, Key, {json_string, Value})}; none -> {json_object, maps:from_list([{Key, {json_string, Value}}])}; _ -> erlang:error(#{gleam_error => panic, message => <<"`panic` expression evaluated."/utf8>>, module => <<"xmljson/internal/xml"/utf8>>, function => <<"parse_attributes"/utf8>>, line => 41}) end end, Dct@1 = begin _pipe = Attr, gleam@list:fold(_pipe, maps:new(), fun(Acc, X@1) -> case X@1 of {attribute, {name, <<"http://www.w3.org/2000/xmlns/"/utf8>>, <<"xmlns"/utf8>>}, Value@1} -> gleam@dict:upsert( Acc, <<"@xmlns"/utf8>>, fun(_capture) -> Upsert_fn(_capture, <<"$"/utf8>>, Value@1) end ); {attribute, {name, <<"http://www.w3.org/2000/xmlns/"/utf8>>, Key@1}, Value@2} -> gleam@dict:upsert( Acc, <<"@xmlns"/utf8>>, fun(_capture@1) -> Upsert_fn(_capture@1, Key@1, Value@2) end ); {attribute, {name, _, Name}, Value@3} -> gleam@dict:insert( Acc, <<"@"/utf8, Name/binary>>, {json_string, Value@3} ) end end) end, Attrs = begin _pipe@1 = gleam@dict:delete(Dct@1, <<"@xmlns"/utf8>>), maps:to_list(_pipe@1) end, Inherit = (case gleam_stdlib:map_get(Dct@1, <<"@xmlns"/utf8>>) of {error, _} -> []; {ok, Value@4} -> [{<<"@xmlns"/utf8>>, Value@4}] end), {Attrs, Inherit}. -file("/home/edwin/Documents/code/gleam/badgerfish/src/xmljson/internal/xml.gleam", 67). -spec merge_namespaces( list({KLL, simplejson@jsonvalue:json_value()}), list({KLL, simplejson@jsonvalue:json_value()}) ) -> list({KLL, simplejson@jsonvalue:json_value()}). merge_namespaces(Nms1, Nms2) -> case {Nms1, Nms2} of {[], []} -> []; {Nms1@1, []} -> Nms1@1; {[], Nms2@1} -> Nms2@1; {[{Key, {json_object, Orig}}], [{_, {json_object, Dct}}]} -> [{Key, {json_object, maps:merge(Orig, Dct)}}]; {_, _} -> erlang:error(#{gleam_error => panic, message => <<"`panic` expression evaluated."/utf8>>, module => <<"xmljson/internal/xml"/utf8>>, function => <<"merge_namespaces"/utf8>>, line => 75}) end. -file("/home/edwin/Documents/code/gleam/badgerfish/src/xmljson/internal/xml.gleam", 79). -spec namespace_lookup_dict(list({any(), simplejson@jsonvalue:json_value()})) -> gleam@dict:dict(binary(), binary()). namespace_lookup_dict(Nms) -> case Nms of [] -> maps:new(); [{_, {json_object, Dct}}] -> _pipe = maps:to_list(Dct), _pipe@1 = gleam@list:map( _pipe, fun(Elem) -> {Key, {json_string, Value}} = case Elem of {_, {json_string, _}} -> Elem; _assert_fail -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail, module => <<"xmljson/internal/xml"/utf8>>, function => <<"namespace_lookup_dict"/utf8>>, line => 85}) end, {Value, Key} end ), maps:from_list(_pipe@1); _ -> erlang:error(#{gleam_error => panic, message => <<"`panic` expression evaluated."/utf8>>, module => <<"xmljson/internal/xml"/utf8>>, function => <<"namespace_lookup_dict"/utf8>>, line => 90}) end. -file("/home/edwin/Documents/code/gleam/badgerfish/src/xmljson/internal/xml.gleam", 94). -spec namespace_prefix(KIO, gleam@dict:dict(KIO, binary())) -> binary(). namespace_prefix(Namespace, Lookup) -> Pre = begin _pipe = gleam_stdlib:map_get(Lookup, Namespace), gleam@result:unwrap(_pipe, <<"$"/utf8>>) end, case Pre of <<"$"/utf8>> -> <<""/utf8>>; Pre@1 -> <
>
end.
-file("/home/edwin/Documents/code/gleam/badgerfish/src/xmljson/internal/xml.gleam", 104).
-spec parse_xml(
xmlm:input(),
list({binary(), simplejson@jsonvalue:json_value()}),
list({binary(), simplejson@jsonvalue:json_value()}),
gleam@dict:dict(binary(), binary())
) -> {list({binary(), simplejson@jsonvalue:json_value()}), xmlm:input()}.
parse_xml(Input, Key_value, Inherit, Namespace_lookup) ->
case xmlm:signal(Input) of
{ok, {{element_start, {tag, {name, Namespace, Name}, Attr}}, Input@1}} ->
{Attrs, Inherit_new} = parse_attributes(Attr),
New_namespaces = merge_namespaces(Inherit, Inherit_new),
New_lookup = namespace_lookup_dict(New_namespaces),
Name@1 = <<(namespace_prefix(Namespace, New_lookup))/binary,
Name/binary>>,
{List, Input@2} = parse_xml(
Input@1,
Attrs,
New_namespaces,
New_lookup
),
Json = {json_object, dict_from_list(List)},
parse_xml(
Input@2,
[{Name@1, Json} | Key_value],
Inherit,
Namespace_lookup
);
{ok, {element_end, Input@3}} ->
{lists:append(Inherit, Key_value), Input@3};
{error, _} ->
case xmlm:eoi(Input) of
{ok, {true, Input@4}} ->
{lists:append(Inherit, Key_value), Input@4};
_ ->
erlang:error(#{gleam_error => panic,
message => <<"`panic` expression evaluated."/utf8>>,
module => <<"xmljson/internal/xml"/utf8>>,
function => <<"parse_xml"/utf8>>,
line => 126})
end;
{ok, {{data, Data}, Input@5}} ->
parse_xml(
Input@5,
[{<<"$"/utf8>>, {json_string, Data}} | Key_value],
Inherit,
Namespace_lookup
);
Value ->
_ = gleam@io:debug(Value),
erlang:error(#{gleam_error => panic,
message => <<"`panic` expression evaluated."/utf8>>,
module => <<"xmljson/internal/xml"/utf8>>,
function => <<"parse_xml"/utf8>>,
line => 138})
end.